diff options
author | waker <wakeroid@gmail.com> | 2012-11-06 21:28:18 +0100 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2012-11-06 21:58:37 +0100 |
commit | d8c66c31fa2a616588f1f4657ad0cfaa26fe982e (patch) | |
tree | a837d4508ecadc3f25a9ee01af7ec4d8d190a5bc | |
parent | 1a20e32e750ae032f21c13f8001c718e42aeff41 (diff) |
gtkui: new hotkey grabbing widget and other fixes
-rw-r--r-- | plugins/gtkui/callbacks.c | 3 | ||||
-rw-r--r-- | plugins/gtkui/callbacks.h | 19 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 23 | ||||
-rw-r--r-- | plugins/gtkui/hotkeys.c | 85 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 29 |
5 files changed, 73 insertions, 86 deletions
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c index 42635ac9..60305973 100644 --- a/plugins/gtkui/callbacks.c +++ b/plugins/gtkui/callbacks.c @@ -1342,3 +1342,6 @@ on_design_mode1_activate (GtkMenuItem *menuitem, gboolean act = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem)); w_set_design_mode (act ? 1 : 0); } + + + diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h index 97e40c8a..967d545f 100644 --- a/plugins/gtkui/callbacks.h +++ b/plugins/gtkui/callbacks.h @@ -1247,3 +1247,22 @@ on_hotkeys_apply_clicked (GtkButton *button, void on_hotkeys_revert_clicked (GtkButton *button, gpointer user_data); + +gboolean +on_hotkey_keycombo_focus_out_event (GtkWidget *widget, + GdkEventFocus *event, + gpointer user_data); + +void +on_hotkeys_set_key_clicked (GtkButton *button, + gpointer user_data); + +gboolean +on_hotkeys_set_key_button_press_event (GtkWidget *widget, + GdkEventButton *event, + gpointer user_data); + +gboolean +on_hotkeys_set_key_key_press_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data); diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index becc30e4..20a305e9 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -5254,27 +5254,20 @@ SOCKS5_HOSTNAME</property> <property name="spacing">8</property> <child> - <widget class="GtkEntry" id="hotkey_keycombo"> - <property name="width_request">284</property> + <widget class="GtkButton" id="hotkeys_set_key"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> - <signal name="key_press_event" handler="on_hotkey_keycombo_key_press_event" last_modification_time="Tue, 30 Oct 2012 20:56:34 GMT"/> - <signal name="button_press_event" handler="on_hotkey_keycombo_button_press_event" last_modification_time="Thu, 01 Nov 2012 20:13:45 GMT"/> - <signal name="motion_notify_event" handler="on_hotkey_keycombo_motion_notify_event" last_modification_time="Thu, 01 Nov 2012 20:23:31 GMT"/> - <signal name="button_release_event" handler="on_hotkey_keycombo_button_release_event" last_modification_time="Thu, 01 Nov 2012 20:23:36 GMT"/> - <signal name="focus_in_event" handler="on_hotkey_keycombo_focus_in_event" last_modification_time="Thu, 01 Nov 2012 20:30:12 GMT"/> + <property name="label" translatable="yes"><Not set></property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_hotkeys_set_key_clicked" last_modification_time="Tue, 06 Nov 2012 20:30:58 GMT"/> + <signal name="key_press_event" handler="on_hotkeys_set_key_key_press_event" last_modification_time="Tue, 06 Nov 2012 20:44:01 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> - <property name="fill">True</property> + <property name="fill">False</property> </packing> </child> diff --git a/plugins/gtkui/hotkeys.c b/plugins/gtkui/hotkeys.c index 92edc8ad..a33f0e9e 100644 --- a/plugins/gtkui/hotkeys.c +++ b/plugins/gtkui/hotkeys.c @@ -259,7 +259,7 @@ prefwin_init_hotkeys (GtkWidget *_prefwin) { gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkeys_actions"), FALSE); gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkey_is_global"), FALSE); - gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkey_keycombo"), FALSE); + gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkeys_set_key"), FALSE); gtk_tree_view_set_model (GTK_TREE_VIEW (hotkeys), GTK_TREE_MODEL (hkstore)); @@ -377,19 +377,19 @@ on_hotkeys_list_cursor_changed (GtkTreeView *treeview, GValue val_isglobal = {0,}; gtk_tree_model_get_value (model, &iter, 3, &val_isglobal); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (prefwin, "hotkey_is_global")), g_value_get_boolean (&val_isglobal)); - gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkey_keycombo"), TRUE); + gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkeys_set_key"), TRUE); GValue val_keycombo = {0,}; gtk_tree_model_get_value (model, &iter, 0, &val_keycombo); const char *keycombo = g_value_get_string (&val_keycombo); - gtk_entry_set_text (GTK_ENTRY (lookup_widget (prefwin, "hotkey_keycombo")), keycombo ? keycombo : ""); + gtk_button_set_label (GTK_BUTTON (lookup_widget (prefwin, "hotkeys_set_key")), keycombo ? keycombo : ""); } else { gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkeys_actions"), FALSE); gtk_tree_view_set_cursor (GTK_TREE_VIEW (lookup_widget (prefwin, "hotkeys_actions")), NULL, NULL, FALSE); gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkey_is_global"), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (prefwin, "hotkey_is_global")), FALSE); - gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkey_keycombo"), FALSE); - gtk_entry_set_text (GTK_ENTRY (lookup_widget (prefwin, "hotkey_keycombo")), ""); + gtk_widget_set_sensitive (lookup_widget (prefwin, "hotkeys_set_key"), FALSE); + gtk_button_set_label (GTK_BUTTON (lookup_widget (prefwin, "hotkeys_set_key")), _("<Not set>")); } if (path) { gtk_tree_path_free (path); @@ -515,6 +515,10 @@ static void get_keycombo_string (guint accel_key, GdkModifierType accel_mods, char *new_value) { // build value new_value[0] = 0; + if (!accel_key) { + strcpy (new_value, _("<Not set>")); + return; + } if (accel_mods & GDK_SHIFT_MASK) { strcat (new_value, "Shift "); } @@ -560,14 +564,23 @@ get_keycombo_string (guint accel_key, GdkModifierType accel_mods, char *new_valu } const char *name = get_name_for_keycode (accel_key); + if (!name) { + strcpy (new_value, _("<Not set>")); + return; + } strcat (new_value, name); } gboolean -on_hotkey_keycombo_key_press_event (GtkWidget *widget, +on_hotkeys_set_key_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { + if (!grabbed) { + printf ("was not grabbed\n"); + return FALSE; + } + GdkModifierType accel_mods = 0; guint accel_key; gchar *path; @@ -576,9 +589,7 @@ on_hotkey_keycombo_key_press_event (GtkWidget *widget, GdkModifierType consumed_modifiers; GdkDisplay *display; - if (!grabbed) { - return TRUE; - } + printf ("was grabbed\n"); display = gtk_widget_get_display (widget); @@ -610,17 +621,17 @@ on_hotkey_keycombo_key_press_event (GtkWidget *widget, accel_mods |= GDK_SHIFT_MASK; char name[1000]; - gtk_entry_set_text (GTK_ENTRY (widget), _("")); + gtk_button_set_label (GTK_BUTTON (widget), _("")); if (accel_mods == 0) { switch (event->keyval) { case GDK_Escape: get_keycombo_string (last_accel_key, last_accel_mask, name); - gtk_entry_set_text (GTK_ENTRY (widget), name); + gtk_button_set_label (GTK_BUTTON (widget), name); goto out; /* cancel */ case GDK_BackSpace: - gtk_entry_set_text (GTK_ENTRY (widget), ""); + gtk_button_set_label (GTK_BUTTON (widget), _("<Not set>")); last_accel_key = 0; last_accel_mask = 0; /* clear the accelerator on Backspace */ @@ -633,6 +644,7 @@ on_hotkey_keycombo_key_press_event (GtkWidget *widget, if (!gtk_accelerator_valid (accel_key, accel_mods)) { + gtk_button_set_label (GTK_BUTTON (widget), _("Invalid button! try again!")); gtk_widget_error_bell (widget); return TRUE; @@ -640,7 +652,7 @@ on_hotkey_keycombo_key_press_event (GtkWidget *widget, last_accel_key = accel_key; last_accel_mask = accel_mods; get_keycombo_string (last_accel_key, last_accel_mask, name); - gtk_entry_set_text (GTK_ENTRY (widget), name); + gtk_button_set_label (GTK_BUTTON (widget), name); // update the tree { @@ -662,65 +674,36 @@ out: } static void -hotkey_grab_focus (GtkWidget *widget, GdkEvent *event) { +hotkey_grab_focus (GtkWidget *widget) { GdkDisplay *display = gtk_widget_get_display (widget); if (grabbed) { return; } grabbed = 0; - if (GDK_GRAB_SUCCESS != gdk_keyboard_grab (gtk_widget_get_window (widget), FALSE, gdk_event_get_time ((GdkEvent*)event))) { + if (GDK_GRAB_SUCCESS != gdk_keyboard_grab (gtk_widget_get_window (widget), FALSE, GDK_CURRENT_TIME)) { return; } if (gdk_pointer_grab (gtk_widget_get_window (widget), FALSE, GDK_BUTTON_PRESS_MASK, NULL, NULL, - gdk_event_get_time ((GdkEvent *)event)) != GDK_GRAB_SUCCESS) + GDK_CURRENT_TIME) != GDK_GRAB_SUCCESS) { - gdk_display_keyboard_ungrab (display, gdk_event_get_time ((GdkEvent *)event)); + gdk_display_keyboard_ungrab (display, GDK_CURRENT_TIME); return; } - gtk_entry_set_text (GTK_ENTRY (widget), _("New key combination...")); + gtk_button_set_label (GTK_BUTTON (widget), _("New key combination...")); grabbed = 1; + printf ("successfully grabbed\n"); } -gboolean -on_hotkey_keycombo_focus_in_event (GtkWidget *widget, - GdkEventFocus *event, - gpointer user_data) -{ - hotkey_grab_focus (widget, (GdkEvent *)event); - return TRUE; -} - -gboolean -on_hotkey_keycombo_button_press_event (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data) -{ - hotkey_grab_focus (widget, (GdkEvent *)event); - return FALSE; -} - -gboolean -on_hotkey_keycombo_motion_notify_event (GtkWidget *widget, - GdkEventMotion *event, - gpointer user_data) -{ - return TRUE; -} - - -gboolean -on_hotkey_keycombo_button_release_event - (GtkWidget *widget, - GdkEventButton *event, +void +on_hotkeys_set_key_clicked (GtkButton *button, gpointer user_data) { - return TRUE; + hotkey_grab_focus (GTK_WIDGET (button)); } - void on_hotkeys_apply_clicked (GtkButton *button, gpointer user_data) diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index 5406ab77..f81a9a55 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -1797,7 +1797,7 @@ create_prefwin (void) GtkWidget *label134; GtkWidget *hseparator3; GtkWidget *hbox107; - GtkWidget *hotkey_keycombo; + GtkWidget *hotkeys_set_key; GtkWidget *hotkey_is_global; GtkWidget *hbuttonbox4; GtkWidget *hotkeys_apply; @@ -2585,11 +2585,9 @@ create_prefwin (void) gtk_widget_show (hbox107); gtk_box_pack_start (GTK_BOX (vbox36), hbox107, FALSE, TRUE, 0); - hotkey_keycombo = gtk_entry_new (); - gtk_widget_show (hotkey_keycombo); - gtk_box_pack_start (GTK_BOX (hbox107), hotkey_keycombo, FALSE, TRUE, 0); - gtk_widget_set_size_request (hotkey_keycombo, 284, -1); - gtk_entry_set_invisible_char (GTK_ENTRY (hotkey_keycombo), 8226); + hotkeys_set_key = gtk_button_new_with_mnemonic (_("<Not set>")); + gtk_widget_show (hotkeys_set_key); + gtk_box_pack_start (GTK_BOX (hbox107), hotkeys_set_key, FALSE, FALSE, 0); hotkey_is_global = gtk_check_button_new_with_mnemonic (_("Global hotkey")); gtk_widget_show (hotkey_is_global); @@ -2910,20 +2908,11 @@ create_prefwin (void) g_signal_connect ((gpointer) hotkeys_actions, "cursor_changed", G_CALLBACK (on_hotkeys_actions_cursor_changed), NULL); - g_signal_connect ((gpointer) hotkey_keycombo, "key_press_event", - G_CALLBACK (on_hotkey_keycombo_key_press_event), + g_signal_connect ((gpointer) hotkeys_set_key, "clicked", + G_CALLBACK (on_hotkeys_set_key_clicked), NULL); - g_signal_connect ((gpointer) hotkey_keycombo, "button_press_event", - G_CALLBACK (on_hotkey_keycombo_button_press_event), - NULL); - g_signal_connect ((gpointer) hotkey_keycombo, "motion_notify_event", - G_CALLBACK (on_hotkey_keycombo_motion_notify_event), - NULL); - g_signal_connect ((gpointer) hotkey_keycombo, "button_release_event", - G_CALLBACK (on_hotkey_keycombo_button_release_event), - NULL); - g_signal_connect ((gpointer) hotkey_keycombo, "focus_in_event", - G_CALLBACK (on_hotkey_keycombo_focus_in_event), + g_signal_connect ((gpointer) hotkeys_set_key, "key_press_event", + G_CALLBACK (on_hotkeys_set_key_key_press_event), NULL); g_signal_connect ((gpointer) hotkey_is_global, "toggled", G_CALLBACK (on_hotkey_is_global_toggled), @@ -3099,7 +3088,7 @@ create_prefwin (void) GLADE_HOOKUP_OBJECT (prefwin, label134, "label134"); GLADE_HOOKUP_OBJECT (prefwin, hseparator3, "hseparator3"); GLADE_HOOKUP_OBJECT (prefwin, hbox107, "hbox107"); - GLADE_HOOKUP_OBJECT (prefwin, hotkey_keycombo, "hotkey_keycombo"); + GLADE_HOOKUP_OBJECT (prefwin, hotkeys_set_key, "hotkeys_set_key"); GLADE_HOOKUP_OBJECT (prefwin, hotkey_is_global, "hotkey_is_global"); GLADE_HOOKUP_OBJECT (prefwin, hbuttonbox4, "hbuttonbox4"); GLADE_HOOKUP_OBJECT (prefwin, hotkeys_apply, "hotkeys_apply"); |