summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-11 19:14:16 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-11 19:14:16 +0200
commit34a06a7d49075a142d1fd7fd3565b0cb9b0c0d68 (patch)
tree4f21e3b2ae3e46d8d3dd8f5e3ec90ef4845cc24d
parent04e43b626b95a664d40d1c6a7c16eb7504f584b5 (diff)
don't create global hotkeys tab in preferences unless there's hotkeys plugin
-rw-r--r--deadbeef.h1
-rw-r--r--plugins.c12
-rw-r--r--plugins.h3
-rw-r--r--plugins/gtkui/deadbeef.glade117
-rw-r--r--plugins/gtkui/interface.c90
-rw-r--r--plugins/gtkui/prefwin.c245
6 files changed, 192 insertions, 276 deletions
diff --git a/deadbeef.h b/deadbeef.h
index c19fcca9..7ef38310 100644
--- a/deadbeef.h
+++ b/deadbeef.h
@@ -494,6 +494,7 @@ typedef struct {
int (*plug_activate) (struct DB_plugin_s *p, int activate);
const char * (*plug_get_decoder_id) (const char *id);
void (*plug_remove_decoder_id) (const char *id);
+ struct DB_plugin_s *(*plug_get_for_id) (const char *id);
// misc utilities
int (*is_local_file) (const char *fname); // returns 1 for local filename, 0 otherwise
} DB_functions_t;
diff --git a/plugins.c b/plugins.c
index 16129475..f8d8a5a4 100644
--- a/plugins.c
+++ b/plugins.c
@@ -241,6 +241,7 @@ static DB_functions_t deadbeef_api = {
.plug_activate = plug_activate,
.plug_get_decoder_id = plug_get_decoder_id,
.plug_remove_decoder_id = plug_remove_decoder_id,
+ .plug_get_for_id = plug_get_for_id,
// misc utilities
.is_local_file = plug_is_local_file,
};
@@ -932,6 +933,17 @@ plug_get_decoder_for_id (const char *id) {
return NULL;
}
+DB_plugin_t *
+plug_get_for_id (const char *id) {
+ DB_plugin_t **plugins = plug_get_list ();
+ for (int c = 0; plugins[c]; c++) {
+ if (plugins[c]->id && !strcmp (id, plugins[c]->id)) {
+ return plugins[c];
+ }
+ }
+ return NULL;
+}
+
int
plug_is_local_file (const char *fname) {
if (!strncasecmp (fname, "file://", 7)) {
diff --git a/plugins.h b/plugins.h
index 3f3db11c..70a93249 100644
--- a/plugins.h
+++ b/plugins.h
@@ -133,6 +133,9 @@ plug_free_decoder_ids (void);
DB_decoder_t *
plug_get_decoder_for_id (const char *id);
+DB_plugin_t *
+plug_get_for_id (const char *id);
+
int
plug_is_local_file (const char *fname);
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);