summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2012-11-06 21:28:18 +0100
committerGravatar waker <wakeroid@gmail.com>2012-11-06 21:58:37 +0100
commitd8c66c31fa2a616588f1f4657ad0cfaa26fe982e (patch)
treea837d4508ecadc3f25a9ee01af7ec4d8d190a5bc
parent1a20e32e750ae032f21c13f8001c718e42aeff41 (diff)
gtkui: new hotkey grabbing widget and other fixes
-rw-r--r--plugins/gtkui/callbacks.c3
-rw-r--r--plugins/gtkui/callbacks.h19
-rw-r--r--plugins/gtkui/deadbeef.glade23
-rw-r--r--plugins/gtkui/hotkeys.c85
-rw-r--r--plugins/gtkui/interface.c29
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">&lt;Not set&gt;</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");