diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2010-04-11 19:14:16 +0200 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2010-04-11 19:14:16 +0200 |
commit | 34a06a7d49075a142d1fd7fd3565b0cb9b0c0d68 (patch) | |
tree | 4f21e3b2ae3e46d8d3dd8f5e3ec90ef4845cc24d /plugins | |
parent | 04e43b626b95a664d40d1c6a7c16eb7504f584b5 (diff) |
don't create global hotkeys tab in preferences unless there's hotkeys plugin
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 117 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 90 | ||||
-rw-r--r-- | plugins/gtkui/prefwin.c | 245 |
3 files changed, 176 insertions, 276 deletions
diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index 968aab0d..3015e3f0 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -1903,7 +1903,7 @@ Example: %a - %t [%l]</property> </child> <child> - <widget class="GtkNotebook" id="notebook2"> + <widget class="GtkNotebook" id="notebook"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="show_tabs">True</property> @@ -3331,121 +3331,6 @@ SOCKS5_HOSTNAME</property> </child> <child> - <widget class="GtkVBox" id="vbox17"> - <property name="border_width">12</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">8</property> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow6"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="hotkeystree"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">True</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">False</property> - <property name="fixed_height_mode">False</property> - <property name="hover_selection">False</property> - <property name="hover_expand">False</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHButtonBox" id="hbuttonbox3"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkButton" id="addhotkey"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Add</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="removehotkey"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Remove</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="applyhotkeys"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Apply</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label66"> - <property name="visible">True</property> - <property name="label" translatable="yes">Global Hotkeys</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="type">tab</property> - </packing> - </child> - - <child> <widget class="GtkVBox" id="vbox18"> <property name="border_width">12</property> <property name="visible">True</property> diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index 7061c306..30ffbe14 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -1377,7 +1377,7 @@ create_prefwin (void) { GtkWidget *prefwin; GtkWidget *dialog_vbox2; - GtkWidget *notebook2; + GtkWidget *notebook; GtkWidget *vbox10; GtkWidget *hbox11; GtkWidget *label23; @@ -1449,14 +1449,6 @@ create_prefwin (void) GtkWidget *label20; GtkWidget *pref_network_proxytype; GtkWidget *label16; - GtkWidget *vbox17; - GtkWidget *scrolledwindow6; - GtkWidget *hotkeystree; - GtkWidget *hbuttonbox3; - GtkWidget *addhotkey; - GtkWidget *removehotkey; - GtkWidget *applyhotkeys; - GtkWidget *label66; GtkWidget *vbox18; GtkWidget *frame5; GtkWidget *alignment3; @@ -1530,13 +1522,13 @@ create_prefwin (void) dialog_vbox2 = GTK_DIALOG (prefwin)->vbox; gtk_widget_show (dialog_vbox2); - notebook2 = gtk_notebook_new (); - gtk_widget_show (notebook2); - gtk_box_pack_start (GTK_BOX (dialog_vbox2), notebook2, FALSE, TRUE, 0); + notebook = gtk_notebook_new (); + gtk_widget_show (notebook); + gtk_box_pack_start (GTK_BOX (dialog_vbox2), notebook, FALSE, TRUE, 0); vbox10 = gtk_vbox_new (FALSE, 8); gtk_widget_show (vbox10); - gtk_container_add (GTK_CONTAINER (notebook2), vbox10); + gtk_container_add (GTK_CONTAINER (notebook), vbox10); gtk_container_set_border_width (GTK_CONTAINER (vbox10), 12); hbox11 = gtk_hbox_new (FALSE, 8); @@ -1567,11 +1559,11 @@ create_prefwin (void) Sound = gtk_label_new ("Sound"); gtk_widget_show (Sound); - gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 0), Sound); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0), Sound); vbox8 = gtk_vbox_new (FALSE, 8); gtk_widget_show (vbox8); - gtk_container_add (GTK_CONTAINER (notebook2), vbox8); + gtk_container_add (GTK_CONTAINER (notebook), vbox8); gtk_container_set_border_width (GTK_CONTAINER (vbox8), 12); pref_dynsamplerate = gtk_check_button_new_with_mnemonic ("Allow dynamic samplerate switching"); @@ -1620,11 +1612,11 @@ create_prefwin (void) label39 = gtk_label_new ("Sound (adv.)"); gtk_widget_show (label39); - gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 1), label39); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1), label39); vbox9 = gtk_vbox_new (FALSE, 8); gtk_widget_show (vbox9); - gtk_container_add (GTK_CONTAINER (notebook2), vbox9); + gtk_container_add (GTK_CONTAINER (notebook), vbox9); gtk_container_set_border_width (GTK_CONTAINER (vbox9), 12); pref_close_send_to_tray = gtk_check_button_new_with_mnemonic ("Close minimizes to tray"); @@ -1851,11 +1843,11 @@ create_prefwin (void) label2 = gtk_label_new ("GUI"); gtk_widget_show (label2); - gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 2), label2); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 2), label2); vbox11 = gtk_vbox_new (FALSE, 8); gtk_widget_show (vbox11); - gtk_container_add (GTK_CONTAINER (notebook2), vbox11); + gtk_container_add (GTK_CONTAINER (notebook), vbox11); gtk_container_set_border_width (GTK_CONTAINER (vbox11), 12); pref_network_enableproxy = gtk_check_button_new_with_mnemonic ("Enable proxy server"); @@ -1911,51 +1903,11 @@ create_prefwin (void) label16 = gtk_label_new ("Network"); gtk_widget_show (label16); - gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 3), label16); - - vbox17 = gtk_vbox_new (FALSE, 8); - gtk_widget_show (vbox17); - gtk_container_add (GTK_CONTAINER (notebook2), vbox17); - gtk_container_set_border_width (GTK_CONTAINER (vbox17), 12); - - scrolledwindow6 = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_show (scrolledwindow6); - gtk_box_pack_start (GTK_BOX (vbox17), scrolledwindow6, TRUE, TRUE, 0); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_SHADOW_IN); - - hotkeystree = gtk_tree_view_new (); - gtk_widget_show (hotkeystree); - gtk_container_add (GTK_CONTAINER (scrolledwindow6), hotkeystree); - gtk_tree_view_set_enable_search (GTK_TREE_VIEW (hotkeystree), FALSE); - - hbuttonbox3 = gtk_hbutton_box_new (); - gtk_widget_show (hbuttonbox3); - gtk_box_pack_start (GTK_BOX (vbox17), hbuttonbox3, FALSE, FALSE, 0); - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox3), GTK_BUTTONBOX_END); - - addhotkey = gtk_button_new_with_mnemonic ("Add"); - gtk_widget_show (addhotkey); - gtk_container_add (GTK_CONTAINER (hbuttonbox3), addhotkey); - GTK_WIDGET_SET_FLAGS (addhotkey, GTK_CAN_DEFAULT); - - removehotkey = gtk_button_new_with_mnemonic ("Remove"); - gtk_widget_show (removehotkey); - gtk_container_add (GTK_CONTAINER (hbuttonbox3), removehotkey); - GTK_WIDGET_SET_FLAGS (removehotkey, GTK_CAN_DEFAULT); - - applyhotkeys = gtk_button_new_with_mnemonic ("Apply"); - gtk_widget_show (applyhotkeys); - gtk_container_add (GTK_CONTAINER (hbuttonbox3), applyhotkeys); - GTK_WIDGET_SET_FLAGS (applyhotkeys, GTK_CAN_DEFAULT); - - label66 = gtk_label_new ("Global Hotkeys"); - gtk_widget_show (label66); - gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 4), label66); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 3), label16); vbox18 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox18); - gtk_container_add (GTK_CONTAINER (notebook2), vbox18); + gtk_container_add (GTK_CONTAINER (notebook), vbox18); gtk_container_set_border_width (GTK_CONTAINER (vbox18), 12); frame5 = gtk_frame_new (NULL); @@ -2131,11 +2083,11 @@ create_prefwin (void) label67 = gtk_label_new ("Tag writer"); gtk_widget_show (label67); - gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 5), label67); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 4), label67); hpaned1 = gtk_hpaned_new (); gtk_widget_show (hpaned1); - gtk_container_add (GTK_CONTAINER (notebook2), hpaned1); + gtk_container_add (GTK_CONTAINER (notebook), hpaned1); gtk_container_set_border_width (GTK_CONTAINER (hpaned1), 12); scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL); @@ -2226,7 +2178,7 @@ create_prefwin (void) label3 = gtk_label_new ("Plugins"); gtk_widget_show (label3); - gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 6), label3); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 5), label3); gtk_misc_set_alignment (GTK_MISC (label3), 0.48, 0.5); dialog_action_area2 = GTK_DIALOG (prefwin)->action_area; @@ -2371,7 +2323,7 @@ create_prefwin (void) /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (prefwin, prefwin, "prefwin"); GLADE_HOOKUP_OBJECT_NO_REF (prefwin, dialog_vbox2, "dialog_vbox2"); - GLADE_HOOKUP_OBJECT (prefwin, notebook2, "notebook2"); + GLADE_HOOKUP_OBJECT (prefwin, notebook, "notebook"); GLADE_HOOKUP_OBJECT (prefwin, vbox10, "vbox10"); GLADE_HOOKUP_OBJECT (prefwin, hbox11, "hbox11"); GLADE_HOOKUP_OBJECT (prefwin, label23, "label23"); @@ -2443,14 +2395,6 @@ create_prefwin (void) GLADE_HOOKUP_OBJECT (prefwin, label20, "label20"); GLADE_HOOKUP_OBJECT (prefwin, pref_network_proxytype, "pref_network_proxytype"); GLADE_HOOKUP_OBJECT (prefwin, label16, "label16"); - GLADE_HOOKUP_OBJECT (prefwin, vbox17, "vbox17"); - GLADE_HOOKUP_OBJECT (prefwin, scrolledwindow6, "scrolledwindow6"); - GLADE_HOOKUP_OBJECT (prefwin, hotkeystree, "hotkeystree"); - GLADE_HOOKUP_OBJECT (prefwin, hbuttonbox3, "hbuttonbox3"); - GLADE_HOOKUP_OBJECT (prefwin, addhotkey, "addhotkey"); - GLADE_HOOKUP_OBJECT (prefwin, removehotkey, "removehotkey"); - GLADE_HOOKUP_OBJECT (prefwin, applyhotkeys, "applyhotkeys"); - GLADE_HOOKUP_OBJECT (prefwin, label66, "label66"); GLADE_HOOKUP_OBJECT (prefwin, vbox18, "vbox18"); GLADE_HOOKUP_OBJECT (prefwin, frame5, "frame5"); GLADE_HOOKUP_OBJECT (prefwin, alignment3, "alignment3"); diff --git a/plugins/gtkui/prefwin.c b/plugins/gtkui/prefwin.c index 2d7734dd..2f68bacd 100644 --- a/plugins/gtkui/prefwin.c +++ b/plugins/gtkui/prefwin.c @@ -25,8 +25,14 @@ #include "callbacks.h" #include "drawing.h" #include "../hotkeys/hotkeys.h" +#include "support.h" + +#define GLADE_HOOKUP_OBJECT(component,widget,name) \ + g_object_set_data_full (G_OBJECT (component), name, \ + gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) -#pragma GCC optimize("O0") +#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ + g_object_set_data (G_OBJECT (component), name, widget) static GtkWidget *prefwin; @@ -134,15 +140,11 @@ on_hk_binding_edited (GtkCellRendererAccel *accel, gchar *path, guint accel_key, } // find key name from hotkeys plugin - DB_plugin_t **plugs = deadbeef->plug_get_list (); - int i; - for (i = 0; plugs[i]; i++) { - if (plugs[i]->id && !strcmp (plugs[i]->id, "hotkeys")) { - const char *name = ((DB_hotkeys_plugin_t *)plugs[i])->get_name_for_keycode (accel_key); - strcat (new_value, name); - gtk_list_store_set (store, &iter, 1, new_value, -1); - break; - } + DB_plugin_t *hotkeys = deadbeef->plug_get_for_id ("hotkeys"); + if (hotkeys) { + const char *name = ((DB_hotkeys_plugin_t *)hotkeys)->get_name_for_keycode (accel_key); + strcat (new_value, name); + gtk_list_store_set (store, &iter, 1, new_value, -1); } // if (!plugs[i]) { // return; @@ -225,6 +227,149 @@ prefwin_init_theme_colors (void) { gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "listview_cursor")), (gtkui_get_listview_cursor_color (&clr), &clr)); } + +// this should be in separate plugin +void +prefwin_add_hotkeys_tab (GtkWidget *prefwin) { + GtkWidget *vbox17; + GtkWidget *scrolledwindow6; + GtkWidget *hotkeystree; + GtkWidget *hbuttonbox3; + GtkWidget *addhotkey; + GtkWidget *removehotkey; + GtkWidget *applyhotkeys; + GtkWidget *label66; + + GtkWidget *notebook2 = lookup_widget (prefwin, "notebook"); + + vbox17 = gtk_vbox_new (FALSE, 8); + gtk_widget_show (vbox17); + gtk_container_add (GTK_CONTAINER (notebook2), vbox17); + gtk_container_set_border_width (GTK_CONTAINER (vbox17), 12); + + scrolledwindow6 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow6); + gtk_box_pack_start (GTK_BOX (vbox17), scrolledwindow6, TRUE, TRUE, 0); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_SHADOW_IN); + + hotkeystree = gtk_tree_view_new (); + gtk_widget_show (hotkeystree); + gtk_container_add (GTK_CONTAINER (scrolledwindow6), hotkeystree); + gtk_tree_view_set_enable_search (GTK_TREE_VIEW (hotkeystree), FALSE); + + hbuttonbox3 = gtk_hbutton_box_new (); + gtk_widget_show (hbuttonbox3); + gtk_box_pack_start (GTK_BOX (vbox17), hbuttonbox3, FALSE, FALSE, 0); + gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox3), GTK_BUTTONBOX_END); + + addhotkey = gtk_button_new_with_mnemonic ("Add"); + gtk_widget_show (addhotkey); + gtk_container_add (GTK_CONTAINER (hbuttonbox3), addhotkey); + GTK_WIDGET_SET_FLAGS (addhotkey, GTK_CAN_DEFAULT); + + removehotkey = gtk_button_new_with_mnemonic ("Remove"); + gtk_widget_show (removehotkey); + gtk_container_add (GTK_CONTAINER (hbuttonbox3), removehotkey); + GTK_WIDGET_SET_FLAGS (removehotkey, GTK_CAN_DEFAULT); + + applyhotkeys = gtk_button_new_with_mnemonic ("Apply"); + gtk_widget_show (applyhotkeys); + gtk_container_add (GTK_CONTAINER (hbuttonbox3), applyhotkeys); + GTK_WIDGET_SET_FLAGS (applyhotkeys, GTK_CAN_DEFAULT); + + label66 = gtk_label_new ("Global Hotkeys"); + gtk_widget_show (label66); + int npages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook2)); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), npages-1), label66); + + GLADE_HOOKUP_OBJECT (prefwin, hotkeystree, "hotkeystree"); +// GLADE_HOOKUP_OBJECT (prefwin, hbuttonbox3, "hbuttonbox3"); + GLADE_HOOKUP_OBJECT (prefwin, addhotkey, "addhotkey"); + GLADE_HOOKUP_OBJECT (prefwin, removehotkey, "removehotkey"); + GLADE_HOOKUP_OBJECT (prefwin, applyhotkeys, "applyhotkeys"); + + GtkTreeView *hktree = GTK_TREE_VIEW (lookup_widget (prefwin, "hotkeystree")); + GtkListStore *hkstore = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + GtkCellRenderer *rend_hk_slot = gtk_cell_renderer_combo_new (); + + g_signal_connect ((gpointer)addhotkey, "clicked", G_CALLBACK (on_addhotkey_clicked), hkstore); + g_signal_connect ((gpointer)removehotkey, "clicked", G_CALLBACK (on_removehotkey_clicked), hktree); + g_signal_connect ((gpointer)applyhotkeys, "clicked", G_CALLBACK (on_applyhotkeys_clicked), hkstore); + + // model for hotkey slots + const char *slots[] = { + "toggle_pause", + "play", + "prev", + "next", + "stop", + "play_random", + "seek_fwd", + "seek_back", + "volume_up", + "volume_down", + "toggle_stop_after_current", + NULL + }; + GtkListStore *slots_store = gtk_list_store_new (1, G_TYPE_STRING); + for (int i = 0; slots[i]; i++) { + GtkTreeIter iter; + gtk_list_store_append (slots_store, &iter); + gtk_list_store_set (slots_store, &iter, 0, slots[i], -1); + } + g_object_set (G_OBJECT (rend_hk_slot), "mode", GTK_CELL_RENDERER_MODE_EDITABLE, NULL); + g_object_set (G_OBJECT (rend_hk_slot), "has-entry", FALSE, NULL); + g_object_set (G_OBJECT (rend_hk_slot), "text-column", 0, NULL); + g_object_set (G_OBJECT (rend_hk_slot), "model", slots_store, NULL); + g_object_set (G_OBJECT (rend_hk_slot), "editable", TRUE, NULL); + + g_signal_connect ((gpointer)rend_hk_slot, "edited", + G_CALLBACK (on_hk_slot_edited), + hkstore); + + GtkCellRenderer *rend_hk_binding = gtk_cell_renderer_accel_new (); + g_object_set (G_OBJECT (rend_hk_binding), "editable", TRUE, NULL); + + g_signal_connect ((gpointer)rend_hk_binding, "accel-edited", + G_CALLBACK (on_hk_binding_edited), + hkstore); + + + GtkTreeViewColumn *hk_col1 = gtk_tree_view_column_new_with_attributes ("Slot", rend_hk_slot, "text", 0, NULL); + GtkTreeViewColumn *hk_col2 = gtk_tree_view_column_new_with_attributes ("Key combination", rend_hk_binding, "text", 1, NULL); + gtk_tree_view_append_column (hktree, hk_col1); + gtk_tree_view_append_column (hktree, hk_col2); + + // fetch hotkeys from config + DB_conf_item_t *item = deadbeef->conf_find ("hotkeys.", NULL); + while (item) { + size_t l = strlen (item->value); + char param[l+1]; + memcpy (param, item->value, l+1); + + char* colon = strchr (param, ':'); + if (!colon) + { + fprintf (stderr, "hotkeys: bad config option %s %s\n", item->key, item->value); + continue; + } + char* command = colon+1; + *colon = 0; + while (*command && ((uint8_t)*command) <= 0x20) { + command++; + } + if (*command) { + GtkTreeIter iter; + gtk_list_store_append (hkstore, &iter); + gtk_list_store_set (hkstore, &iter, 0, command, 1, param, -1); + item = deadbeef->conf_find ("hotkeys.", item); + } + } + gtk_tree_view_set_model (hktree, GTK_TREE_MODEL (hkstore)); + +} + void on_preferences_activate (GtkMenuItem *menuitem, gpointer user_data) @@ -361,84 +506,10 @@ on_preferences_activate (GtkMenuItem *menuitem, // gtk_widget_show (w); // hotkeys - GtkTreeView *hktree = GTK_TREE_VIEW (lookup_widget (prefwin, "hotkeystree")); - GtkListStore *hkstore = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); - GtkCellRenderer *rend_hk_slot = gtk_cell_renderer_combo_new (); - - // model for hotkey slots - const char *slots[] = { - "toggle_pause", - "play", - "prev", - "next", - "stop", - "play_random", - "seek_fwd", - "seek_back", - "volume_up", - "volume_down", - "toggle_stop_after_current", - NULL - }; - GtkListStore *slots_store = gtk_list_store_new (1, G_TYPE_STRING); - for (int i = 0; slots[i]; i++) { - GtkTreeIter iter; - gtk_list_store_append (slots_store, &iter); - gtk_list_store_set (slots_store, &iter, 0, slots[i], -1); + DB_plugin_t *hotkeys = deadbeef->plug_get_for_id ("hotkeys"); + if (hotkeys) { + prefwin_add_hotkeys_tab (prefwin); } - g_object_set (G_OBJECT (rend_hk_slot), "mode", GTK_CELL_RENDERER_MODE_EDITABLE, NULL); - g_object_set (G_OBJECT (rend_hk_slot), "has-entry", FALSE, NULL); - g_object_set (G_OBJECT (rend_hk_slot), "text-column", 0, NULL); - g_object_set (G_OBJECT (rend_hk_slot), "model", slots_store, NULL); - g_object_set (G_OBJECT (rend_hk_slot), "editable", TRUE, NULL); - - g_signal_connect ((gpointer)rend_hk_slot, "edited", - G_CALLBACK (on_hk_slot_edited), - hkstore); - - GtkCellRenderer *rend_hk_binding = gtk_cell_renderer_accel_new (); - g_object_set (G_OBJECT (rend_hk_binding), "editable", TRUE, NULL); - - g_signal_connect ((gpointer)rend_hk_binding, "accel-edited", - G_CALLBACK (on_hk_binding_edited), - hkstore); - - - GtkTreeViewColumn *hk_col1 = gtk_tree_view_column_new_with_attributes ("Slot", rend_hk_slot, "text", 0, NULL); - GtkTreeViewColumn *hk_col2 = gtk_tree_view_column_new_with_attributes ("Key combination", rend_hk_binding, "text", 1, NULL); - gtk_tree_view_append_column (hktree, hk_col1); - gtk_tree_view_append_column (hktree, hk_col2); - - // fetch hotkeys from config - DB_conf_item_t *item = deadbeef->conf_find ("hotkeys.", NULL); - while (item) { - size_t l = strlen (item->value); - char param[l+1]; - memcpy (param, item->value, l+1); - - char* colon = strchr (param, ':'); - if (!colon) - { - fprintf (stderr, "hotkeys: bad config option %s %s\n", item->key, item->value); - continue; - } - char* command = colon+1; - *colon = 0; - while (*command && ((uint8_t)*command) <= 0x20) { - command++; - } - if (*command) { - GtkTreeIter iter; - gtk_list_store_append (hkstore, &iter); - gtk_list_store_set (hkstore, &iter, 0, command, 1, param, -1); - item = deadbeef->conf_find ("hotkeys.", item); - } - } - gtk_tree_view_set_model (hktree, GTK_TREE_MODEL (hkstore)); - - g_signal_connect ((gpointer)lookup_widget (prefwin, "addhotkey"), "clicked", G_CALLBACK (on_addhotkey_clicked), hkstore); - g_signal_connect ((gpointer)lookup_widget (prefwin, "removehotkey"), "clicked", G_CALLBACK (on_removehotkey_clicked), hktree); - g_signal_connect ((gpointer)lookup_widget (prefwin, "applyhotkeys"), "clicked", G_CALLBACK (on_applyhotkeys_clicked), hkstore); // tag writer int strip_id3v2 = deadbeef->conf_get_int ("mp3.strip_id3v2", 0); |