clients/editor: Toggle panel visibility on click
authorJoshua Watt <jpewhacker@gmail.com>
Sat, 24 Jun 2017 21:03:42 +0000 (16:03 -0500)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Thu, 30 Nov 2017 14:15:56 +0000 (16:15 +0200)
If the --click-to-show option is specified, clicking an input field will toggle
the input panel visiblity

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Tested-by: Silvan Jegen <s.jegen@gmail.com>
Reviewed-by: Jan Arne Petersen <janarne@gmail.com>
clients/editor.c

index b63c562..78d10d2 100644 (file)
@@ -49,6 +49,7 @@ struct text_entry {
        struct window *window;
        char *text;
        int active;
+       bool panel_visible;
        uint32_t cursor;
        uint32_t anchor;
        struct {
@@ -499,8 +500,10 @@ text_input_leave(void *data,
        text_entry_commit_and_reset(entry);
        entry->active--;
 
-       if (!entry->active)
+       if (!entry->active) {
                zwp_text_input_v1_hide_input_panel(text_input);
+               entry->panel_visible = false;
+       }
 
        widget_schedule_redraw(entry->widget);
 }
@@ -699,6 +702,7 @@ text_entry_create(struct editor *editor, const char *text)
        entry->window = editor->window;
        entry->text = strdup(text);
        entry->active = 0;
+       entry->panel_visible = false;
        entry->cursor = strlen(text);
        entry->anchor = entry->cursor;
        entry->text_input =
@@ -787,7 +791,12 @@ text_entry_activate(struct text_entry *entry,
        struct wl_surface *surface = window_get_wl_surface(entry->window);
 
        if (entry->click_to_show && entry->active) {
-               zwp_text_input_v1_show_input_panel(entry->text_input);
+               entry->panel_visible = !entry->panel_visible;
+
+               if (entry->panel_visible)
+                       zwp_text_input_v1_show_input_panel(entry->text_input);
+               else
+                       zwp_text_input_v1_hide_input_panel(entry->text_input);
 
                return;
        }