diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/gtkui/callbacks.c | 1 | ||||
-rw-r--r-- | plugins/gtkui/callbacks.h | 24 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 203 | ||||
-rw-r--r-- | plugins/gtkui/gtkui.c | 2 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 145 | ||||
-rw-r--r-- | plugins/gtkui/interface.h | 2 | ||||
-rw-r--r-- | plugins/gtkui/tabs.c | 121 |
7 files changed, 475 insertions, 23 deletions
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c index d68f5e19..09a40adf 100644 --- a/plugins/gtkui/callbacks.c +++ b/plugins/gtkui/callbacks.c @@ -2303,3 +2303,4 @@ on_trackproperties_delete_event (GtkWidget *widget, trackproperties = NULL; return FALSE; } + diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h index 5070d73e..63c4990b 100644 --- a/plugins/gtkui/callbacks.h +++ b/plugins/gtkui/callbacks.h @@ -836,3 +836,27 @@ gboolean on_tabbar_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, gpointer user_data); + +void +on_rename_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_remove_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_add_new_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_load_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_save_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_save_all_playlists1_activate (GtkMenuItem *menuitem, + gpointer user_data); diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index 0bc0cad0..21d84934 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -797,7 +797,7 @@ <widget class="GtkDrawingArea" id="tabbar"> <property name="height_request">24</property> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <signal name="button_press_event" handler="on_tabbar_button_press_event" last_modification_time="Sun, 07 Feb 2010 19:07:32 GMT"/> <signal name="button_release_event" handler="on_tabbar_button_release_event" last_modification_time="Sun, 07 Feb 2010 19:07:35 GMT"/> <signal name="configure_event" handler="on_tabbar_configure_event" last_modification_time="Sun, 07 Feb 2010 19:07:41 GMT"/> @@ -2090,7 +2090,7 @@ <widget class="GtkDialog" id="editcolumndlg"> <property name="border_width">12</property> <property name="visible">True</property> - <property name="title" translatable="yes">dialog1</property> + <property name="title" translatable="yes">editcolumndlg</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> <property name="modal">True</property> @@ -3450,4 +3450,203 @@ SOCKS5_HOSTNAME</property> </child> </widget> +<widget class="GtkDialog" id="editplaylistdlg"> + <property name="border_width">12</property> + <property name="visible">True</property> + <property name="title" translatable="yes">editplaylistdlg</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_NONE</property> + <property name="modal">False</property> + <property name="resizable">True</property> + <property name="destroy_with_parent">False</property> + <property name="decorated">True</property> + <property name="skip_taskbar_hint">False</property> + <property name="skip_pager_hint">False</property> + <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <property name="focus_on_map">True</property> + <property name="urgency_hint">False</property> + <property name="has_separator">True</property> + + <child internal-child="vbox"> + <widget class="GtkVBox" id="dialog-vbox3"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child internal-child="action_area"> + <widget class="GtkHButtonBox" id="dialog-action_area3"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + + <child> + <widget class="GtkButton" id="cancelbutton2"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-cancel</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="response_id">-6</property> + </widget> + </child> + + <child> + <widget class="GtkButton" id="okbutton2"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-ok</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="response_id">-5</property> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">GTK_PACK_END</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox15"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkHBox" id="hbox33"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">8</property> + + <child> + <widget class="GtkLabel" id="label40"> + <property name="visible">True</property> + <property name="label" translatable="yes">Title:</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="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="title"> + <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> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + +<widget class="GtkMenu" id="plmenu"> + + <child> + <widget class="GtkMenuItem" id="rename_playlist1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Rename Playlist</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_rename_playlist1_activate" last_modification_time="Tue, 09 Feb 2010 17:43:59 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="remove_playlist1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Remove Playlist</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_remove_playlist1_activate" last_modification_time="Tue, 09 Feb 2010 17:43:59 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="add_new_playlist1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Add New Playlist</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_add_new_playlist1_activate" last_modification_time="Tue, 09 Feb 2010 17:43:59 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkSeparatorMenuItem" id="separator11"> + <property name="visible">True</property> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="load_playlist1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Load Playlist</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_load_playlist1_activate" last_modification_time="Tue, 09 Feb 2010 17:43:59 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="save_playlist1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Save Playlist</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_save_playlist1_activate" last_modification_time="Tue, 09 Feb 2010 17:43:59 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="save_all_playlists1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Save All Playlists</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_save_all_playlists1_activate" last_modification_time="Tue, 09 Feb 2010 17:43:59 GMT"/> + </widget> + </child> +</widget> + </glade-interface> diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c index 0ac4ccf9..2c072c63 100644 --- a/plugins/gtkui/gtkui.c +++ b/plugins/gtkui/gtkui.c @@ -326,6 +326,8 @@ playlistswitch_cb (gpointer none) { playlist_refresh (); search_refresh (); tabbar_draw (lookup_widget (mainwin, "tabbar")); + //GtkWidget *widget = lookup_widget (mainwin, "tabbar"); + //gdk_window_invalidate_rect (widget->window, NULL, FALSE); return FALSE; } diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index 94d115ac..a3f1e341 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -506,7 +506,7 @@ create_mainwin (void) gtk_widget_show (tabbar); gtk_box_pack_start (GTK_BOX (vbox1), tabbar, FALSE, TRUE, 0); gtk_widget_set_size_request (tabbar, -1, 24); - gtk_widget_set_events (tabbar, GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); + gtk_widget_set_events (tabbar, GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); frame1 = gtk_frame_new (NULL); gtk_widget_show (frame1); @@ -1621,7 +1621,7 @@ create_editcolumndlg (void) editcolumndlg = gtk_dialog_new (); gtk_container_set_border_width (GTK_CONTAINER (editcolumndlg), 12); - gtk_window_set_title (GTK_WINDOW (editcolumndlg), "dialog1"); + gtk_window_set_title (GTK_WINDOW (editcolumndlg), "editcolumndlg"); gtk_window_set_modal (GTK_WINDOW (editcolumndlg), TRUE); gtk_window_set_type_hint (GTK_WINDOW (editcolumndlg), GDK_WINDOW_TYPE_HINT_DIALOG); @@ -2187,3 +2187,144 @@ create_prefwin (void) return prefwin; } +GtkWidget* +create_editplaylistdlg (void) +{ + GtkWidget *editplaylistdlg; + GtkWidget *dialog_vbox3; + GtkWidget *vbox15; + GtkWidget *hbox33; + GtkWidget *label40; + GtkWidget *title; + GtkWidget *dialog_action_area3; + GtkWidget *cancelbutton2; + GtkWidget *okbutton2; + + editplaylistdlg = gtk_dialog_new (); + gtk_container_set_border_width (GTK_CONTAINER (editplaylistdlg), 12); + gtk_window_set_title (GTK_WINDOW (editplaylistdlg), "editplaylistdlg"); + gtk_window_set_type_hint (GTK_WINDOW (editplaylistdlg), GDK_WINDOW_TYPE_HINT_DIALOG); + + dialog_vbox3 = GTK_DIALOG (editplaylistdlg)->vbox; + gtk_widget_show (dialog_vbox3); + + vbox15 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox15); + gtk_box_pack_start (GTK_BOX (dialog_vbox3), vbox15, TRUE, TRUE, 0); + + hbox33 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox33); + gtk_box_pack_start (GTK_BOX (vbox15), hbox33, TRUE, TRUE, 0); + + label40 = gtk_label_new ("Title:"); + gtk_widget_show (label40); + gtk_box_pack_start (GTK_BOX (hbox33), label40, FALSE, FALSE, 0); + + title = gtk_entry_new (); + gtk_widget_show (title); + gtk_box_pack_start (GTK_BOX (hbox33), title, TRUE, TRUE, 0); + gtk_entry_set_invisible_char (GTK_ENTRY (title), 8226); + + dialog_action_area3 = GTK_DIALOG (editplaylistdlg)->action_area; + gtk_widget_show (dialog_action_area3); + gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area3), GTK_BUTTONBOX_END); + + cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel"); + gtk_widget_show (cancelbutton2); + gtk_dialog_add_action_widget (GTK_DIALOG (editplaylistdlg), cancelbutton2, GTK_RESPONSE_CANCEL); + GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT); + + okbutton2 = gtk_button_new_from_stock ("gtk-ok"); + gtk_widget_show (okbutton2); + gtk_dialog_add_action_widget (GTK_DIALOG (editplaylistdlg), okbutton2, GTK_RESPONSE_OK); + GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT); + + /* Store pointers to all widgets, for use by lookup_widget(). */ + GLADE_HOOKUP_OBJECT_NO_REF (editplaylistdlg, editplaylistdlg, "editplaylistdlg"); + GLADE_HOOKUP_OBJECT_NO_REF (editplaylistdlg, dialog_vbox3, "dialog_vbox3"); + GLADE_HOOKUP_OBJECT (editplaylistdlg, vbox15, "vbox15"); + GLADE_HOOKUP_OBJECT (editplaylistdlg, hbox33, "hbox33"); + GLADE_HOOKUP_OBJECT (editplaylistdlg, label40, "label40"); + GLADE_HOOKUP_OBJECT (editplaylistdlg, title, "title"); + GLADE_HOOKUP_OBJECT_NO_REF (editplaylistdlg, dialog_action_area3, "dialog_action_area3"); + GLADE_HOOKUP_OBJECT (editplaylistdlg, cancelbutton2, "cancelbutton2"); + GLADE_HOOKUP_OBJECT (editplaylistdlg, okbutton2, "okbutton2"); + + return editplaylistdlg; +} + +GtkWidget* +create_plmenu (void) +{ + GtkWidget *plmenu; + GtkWidget *rename_playlist1; + GtkWidget *remove_playlist1; + GtkWidget *add_new_playlist1; + GtkWidget *separator11; + GtkWidget *load_playlist1; + GtkWidget *save_playlist1; + GtkWidget *save_all_playlists1; + + plmenu = gtk_menu_new (); + + rename_playlist1 = gtk_menu_item_new_with_mnemonic ("Rename Playlist"); + gtk_widget_show (rename_playlist1); + gtk_container_add (GTK_CONTAINER (plmenu), rename_playlist1); + + remove_playlist1 = gtk_menu_item_new_with_mnemonic ("Remove Playlist"); + gtk_widget_show (remove_playlist1); + gtk_container_add (GTK_CONTAINER (plmenu), remove_playlist1); + + add_new_playlist1 = gtk_menu_item_new_with_mnemonic ("Add New Playlist"); + gtk_widget_show (add_new_playlist1); + gtk_container_add (GTK_CONTAINER (plmenu), add_new_playlist1); + + separator11 = gtk_separator_menu_item_new (); + gtk_widget_show (separator11); + gtk_container_add (GTK_CONTAINER (plmenu), separator11); + gtk_widget_set_sensitive (separator11, FALSE); + + load_playlist1 = gtk_menu_item_new_with_mnemonic ("Load Playlist"); + gtk_widget_show (load_playlist1); + gtk_container_add (GTK_CONTAINER (plmenu), load_playlist1); + + save_playlist1 = gtk_menu_item_new_with_mnemonic ("Save Playlist"); + gtk_widget_show (save_playlist1); + gtk_container_add (GTK_CONTAINER (plmenu), save_playlist1); + + save_all_playlists1 = gtk_menu_item_new_with_mnemonic ("Save All Playlists"); + gtk_widget_show (save_all_playlists1); + gtk_container_add (GTK_CONTAINER (plmenu), save_all_playlists1); + + g_signal_connect ((gpointer) rename_playlist1, "activate", + G_CALLBACK (on_rename_playlist1_activate), + NULL); + g_signal_connect ((gpointer) remove_playlist1, "activate", + G_CALLBACK (on_remove_playlist1_activate), + NULL); + g_signal_connect ((gpointer) add_new_playlist1, "activate", + G_CALLBACK (on_add_new_playlist1_activate), + NULL); + g_signal_connect ((gpointer) load_playlist1, "activate", + G_CALLBACK (on_load_playlist1_activate), + NULL); + g_signal_connect ((gpointer) save_playlist1, "activate", + G_CALLBACK (on_save_playlist1_activate), + NULL); + g_signal_connect ((gpointer) save_all_playlists1, "activate", + G_CALLBACK (on_save_all_playlists1_activate), + NULL); + + /* Store pointers to all widgets, for use by lookup_widget(). */ + GLADE_HOOKUP_OBJECT_NO_REF (plmenu, plmenu, "plmenu"); + GLADE_HOOKUP_OBJECT (plmenu, rename_playlist1, "rename_playlist1"); + GLADE_HOOKUP_OBJECT (plmenu, remove_playlist1, "remove_playlist1"); + GLADE_HOOKUP_OBJECT (plmenu, add_new_playlist1, "add_new_playlist1"); + GLADE_HOOKUP_OBJECT (plmenu, separator11, "separator11"); + GLADE_HOOKUP_OBJECT (plmenu, load_playlist1, "load_playlist1"); + GLADE_HOOKUP_OBJECT (plmenu, save_playlist1, "save_playlist1"); + GLADE_HOOKUP_OBJECT (plmenu, save_all_playlists1, "save_all_playlists1"); + + return plmenu; +} + diff --git a/plugins/gtkui/interface.h b/plugins/gtkui/interface.h index 0cac3e09..78c94da9 100644 --- a/plugins/gtkui/interface.h +++ b/plugins/gtkui/interface.h @@ -12,3 +12,5 @@ GtkWidget* create_addlocation (void); GtkWidget* create_trackproperties (void); GtkWidget* create_editcolumndlg (void); GtkWidget* create_prefwin (void); +GtkWidget* create_editplaylistdlg (void); +GtkWidget* create_plmenu (void); diff --git a/plugins/gtkui/tabs.c b/plugins/gtkui/tabs.c index d302d582..58692139 100644 --- a/plugins/gtkui/tabs.c +++ b/plugins/gtkui/tabs.c @@ -30,6 +30,7 @@ static int margin_size = 10; static int tab_dragging = -1; static int tab_movepos; +static int tab_clicked = -1; void tabbar_draw (GtkWidget *widget) { @@ -128,34 +129,45 @@ tabbar_draw (GtkWidget *widget) { draw_end (); } +static int +get_tab_under_cursor (int x) { + int idx; + int cnt = deadbeef->plt_get_count (); + int fw = 0; + int tab_selected = deadbeef->plt_get_curr (); + for (idx = 0; idx < cnt; idx++) { + const char *title = deadbeef->plt_get_title (idx); + int w = 0; + int h = 0; + draw_get_text_extents (title, strlen (title), &w, &h); + w += margin_size + 10; + if (tab_selected == idx) { + w += margin_size; + } + fw += w; + if (fw > x) { + return idx; + } + } + return -1; +} + gboolean on_tabbar_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { + tab_clicked = get_tab_under_cursor (event->x); if (event->button == 1) { - int idx; - int cnt = deadbeef->plt_get_count (); - int fw = 0; - int tab_selected = deadbeef->plt_get_curr (); - for (idx = 0; idx < cnt; idx++) { - const char *title = deadbeef->plt_get_title (idx); - int w = 0; - int h = 0; - draw_get_text_extents (title, strlen (title), &w, &h); - w += margin_size + 10; - if (tab_selected == idx) { - w += margin_size; - } - fw += w; - if (fw > event->x) { - deadbeef->plt_set_curr (idx); -// tabbar_draw (widget); - break; - } + if (tab_clicked != -1) { + deadbeef->plt_set_curr (tab_clicked); } } + else if (event->button == 3) { + GtkWidget *menu = create_plmenu (); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, widget, 0, gtk_get_current_event_time()); + } return FALSE; } @@ -198,3 +210,74 @@ on_tabbar_motion_notify_event (GtkWidget *widget, return FALSE; } +void +on_rename_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + +} + + +void +on_remove_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + if (tab_clicked != -1) { + deadbeef->plt_remove (tab_clicked); + } +} + + +void +on_add_new_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + int cnt = deadbeef->plt_get_count (); + int i; + int idx = 0; + for (;;) { + char name[100]; + if (!idx) { + strcpy (name, "New Playlist"); + } + else { + snprintf (name, sizeof (name), "New Playlist (%d)", idx); + } + for (i = 0; i < cnt; i++) { + const char *t = deadbeef->plt_get_title (i); + if (!strcasecmp (t, name)) { + break; + } + } + if (i == cnt) { + deadbeef->plt_add (cnt, name); + break; + } + idx++; + } +} + + +void +on_load_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + +} + + +void +on_save_playlist1_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + +} + + +void +on_save_all_playlists1_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + +} + |