diff options
author | Viktor Semykin <thesame.ml@gmail.com> | 2010-04-06 22:19:35 +0300 |
---|---|---|
committer | Viktor Semykin <thesame.ml@gmail.com> | 2010-04-06 22:19:35 +0300 |
commit | 823669afef8942b45960391f2f3d732ab1ad06e3 (patch) | |
tree | 067ad15823314a39d5c9d15878c9367b826bccac /plugins/gtkui | |
parent | 6dbd7dd11bccc0ce7507e7b4b195517f123e8694 (diff) | |
parent | 9c6e2108adbcedccee5a2984b1d8ffc57e6b1087 (diff) |
Merge branch 'devel' of git://deadbeef.git.sourceforge.net/gitroot/deadbeef/deadbeef into eq
Diffstat (limited to 'plugins/gtkui')
-rw-r--r-- | plugins/gtkui/callbacks.c | 2 | ||||
-rw-r--r-- | plugins/gtkui/coverart.c | 9 | ||||
-rw-r--r-- | plugins/gtkui/ddblistview.c | 2 | ||||
-rw-r--r-- | plugins/gtkui/ddbtabstrip.c | 8 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 19 | ||||
-rw-r--r-- | plugins/gtkui/fileman.c | 3 | ||||
-rw-r--r-- | plugins/gtkui/gtkui.c | 19 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 93 | ||||
-rw-r--r-- | plugins/gtkui/plcommon.c | 47 | ||||
-rw-r--r-- | plugins/gtkui/search.c | 43 | ||||
-rw-r--r-- | plugins/gtkui/trkproperties.c | 95 |
11 files changed, 195 insertions, 145 deletions
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c index cacba4b0..fffda154 100644 --- a/plugins/gtkui/callbacks.c +++ b/plugins/gtkui/callbacks.c @@ -292,7 +292,7 @@ on_mainwin_key_press_event (GtkWidget *widget, gpointer user_data) { - if (event->keyval == GDK_n && !(event->state&(GDK_SHIFT_MASK|GDK_CONTROL_MASK|GDK_MOD1_MASK))) { + if (event->keyval == GDK_n && !event->state) { // button for that one is not in toolbar anymore, so handle it manually deadbeef->sendmessage (M_PLAYRANDOM, 0, 0, 0); } diff --git a/plugins/gtkui/coverart.c b/plugins/gtkui/coverart.c index 2cf880ff..c86f447c 100644 --- a/plugins/gtkui/coverart.c +++ b/plugins/gtkui/coverart.c @@ -25,10 +25,10 @@ #include "../artwork/artwork.h" #include "gtkui.h" -#pragma GCC optimize("O0") +#define DEFAULT_COVER_PATH (PREFIX "/share/deadbeef/pixmaps/noartwork.jpg") -#define trace(...) { fprintf(stderr, __VA_ARGS__); } -//#define trace(...) +//#define trace(...) { fprintf(stderr, __VA_ARGS__); } +#define trace(...) extern DB_artwork_plugin_t *coverart_plugin; @@ -145,6 +145,9 @@ loading_thread (void *none) { GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (queue->fname, NULL); if (!pixbuf) { trace ("GDK failed to load pixbuf from file %s\n", queue->fname); + pixbuf = gdk_pixbuf_new_from_file (DEFAULT_COVER_PATH, NULL); + } + if (!pixbuf) { // make default empty image pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 2, 2); } diff --git a/plugins/gtkui/ddblistview.c b/plugins/gtkui/ddblistview.c index 441e126b..33840b86 100644 --- a/plugins/gtkui/ddblistview.c +++ b/plugins/gtkui/ddblistview.c @@ -1725,7 +1725,7 @@ ddb_listview_handle_keypress (DdbListview *ps, int keyval, int state) { GtkWidget *range = ps->scrollbar; GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (range)); - if (state & (GDK_CONTROL_MASK|GDK_MOD1_MASK)) { + if (state & ~(GDK_SHIFT_MASK)) { return 0; } diff --git a/plugins/gtkui/ddbtabstrip.c b/plugins/gtkui/ddbtabstrip.c index 8d9b6675..98ec3f1a 100644 --- a/plugins/gtkui/ddbtabstrip.c +++ b/plugins/gtkui/ddbtabstrip.c @@ -201,6 +201,8 @@ static int tab_overlap_size = 0; // widget_height/2 static int tabs_left_margin = 4; static int min_tab_size = 80; +static int tab_moved = 0; + void ddb_tabstrip_draw_tab (GtkWidget *widget, GdkDrawable *drawable, int selected, int x, int y, int w, int h) { GdkPoint points_filled[] = { @@ -452,6 +454,7 @@ on_tabstrip_button_press_event (GtkWidget *widget, ts->prepare = 1; ts->dragging = tab_clicked; ts->prev_x = event->x; + tab_moved = 0; } else if (event->button == 3) { GtkWidget *menu = create_plmenu (); @@ -481,6 +484,10 @@ on_tabstrip_button_release_event (GtkWidget *widget, ts->prepare = 0; tabstrip_render (ts); tabstrip_expose (ts, 0, 0, widget->allocation.width, widget->allocation.height); + if (tab_moved) { + deadbeef->pl_save_all (); + deadbeef->conf_save (); + } } } return FALSE; @@ -558,6 +565,7 @@ on_tabstrip_motion_notify_event (GtkWidget *widget, snprintf (str2, sizeof (str2), "playlist.scroll.%d", inspos); pos2 = deadbeef->conf_get_int (str2, 0); deadbeef->plt_move (ts->dragging, inspos); + tab_moved = 1; deadbeef->conf_set_int (str1, pos2); deadbeef->conf_set_int (str2, pos1); ts->dragging = inspos; diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index bd0ec65d..03eb8cf4 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -58,7 +58,7 @@ <accelerator key="O" modifiers="GDK_CONTROL_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image368"> + <widget class="GtkImage" id="image376"> <property name="visible">True</property> <property name="stock">gtk-open</property> <property name="icon_size">1</property> @@ -85,7 +85,7 @@ <signal name="activate" handler="on_add_files_activate" last_modification_time="Sat, 04 Jul 2009 13:04:01 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image369"> + <widget class="GtkImage" id="image377"> <property name="visible">True</property> <property name="stock">gtk-add</property> <property name="icon_size">1</property> @@ -106,7 +106,7 @@ <signal name="activate" handler="on_add_folders_activate" last_modification_time="Sun, 06 Sep 2009 17:51:40 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image370"> + <widget class="GtkImage" id="image378"> <property name="visible">True</property> <property name="stock">gtk-add</property> <property name="icon_size">1</property> @@ -127,7 +127,7 @@ <signal name="activate" handler="on_add_audio_cd_activate" last_modification_time="Sat, 10 Oct 2009 15:29:22 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image371"> + <widget class="GtkImage" id="image379"> <property name="visible">True</property> <property name="stock">gtk-add</property> <property name="icon_size">1</property> @@ -207,7 +207,7 @@ <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image372"> + <widget class="GtkImage" id="image380"> <property name="visible">True</property> <property name="stock">gtk-quit</property> <property name="icon_size">1</property> @@ -241,7 +241,7 @@ <signal name="activate" handler="on_clear1_activate" last_modification_time="Sun, 06 Sep 2009 18:30:03 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image373"> + <widget class="GtkImage" id="image381"> <property name="visible">True</property> <property name="stock">gtk-clear</property> <property name="icon_size">1</property> @@ -270,6 +270,7 @@ <property name="label" translatable="yes">Deselect all</property> <property name="use_underline">True</property> <signal name="activate" handler="on_deselect_all1_activate" last_modification_time="Fri, 02 Apr 2010 11:30:31 GMT"/> + <accelerator key="Escape" modifiers="0" signal="activate"/> </widget> </child> @@ -299,7 +300,7 @@ <signal name="activate" handler="on_remove1_activate" last_modification_time="Sun, 06 Sep 2009 18:30:03 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image374"> + <widget class="GtkImage" id="image382"> <property name="visible">True</property> <property name="stock">gtk-remove</property> <property name="icon_size">1</property> @@ -558,7 +559,7 @@ <signal name="activate" handler="on_help1_activate" last_modification_time="Tue, 08 Sep 2009 17:32:06 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image375"> + <widget class="GtkImage" id="image383"> <property name="visible">True</property> <property name="stock">gtk-help</property> <property name="icon_size">1</property> @@ -618,7 +619,7 @@ <signal name="activate" handler="on_about1_activate" last_modification_time="Sat, 04 Jul 2009 12:57:58 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image376"> + <widget class="GtkImage" id="image384"> <property name="visible">True</property> <property name="stock">gtk-about</property> <property name="icon_size">1</property> diff --git a/plugins/gtkui/fileman.c b/plugins/gtkui/fileman.c index 1ae8b4aa..8ef81238 100644 --- a/plugins/gtkui/fileman.c +++ b/plugins/gtkui/fileman.c @@ -32,7 +32,8 @@ gtkpl_add_file_info_cb (DB_playItem_t *it, void *data) { static gboolean progress_hide_idle (gpointer data) { progress_hide (); - playlist_refresh (); + deadbeef->sendmessage (M_PLAYLISTREFRESH, 0, 0, 0); + //playlist_refresh (); return FALSE; } diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c index ab26084f..60c996cf 100644 --- a/plugins/gtkui/gtkui.c +++ b/plugins/gtkui/gtkui.c @@ -328,6 +328,10 @@ redraw_queued_tracks (DdbListview *pl, int list) { static gboolean redraw_queued_tracks_cb (gpointer nothing) { + int iconified = gdk_window_get_state(mainwin->window) & GDK_WINDOW_STATE_ICONIFIED; + if (!GTK_WIDGET_VISIBLE (mainwin) || iconified) { + return FALSE; + } redraw_queued_tracks (DDB_LISTVIEW (lookup_widget (mainwin, "playlist")), PL_MAIN); redraw_queued_tracks (DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")), PL_SEARCH); return FALSE; @@ -370,12 +374,10 @@ static void current_track_changed (DB_playItem_t *it) { char str[600]; if (it) { - char dname[512]; - deadbeef->pl_format_item_display_name (it, dname, 512); - snprintf (str, sizeof (str), "DeaDBeeF - %s", dname); + deadbeef->pl_format_title (it, -1, str, sizeof (str), -1, "DeaDBeeF-" VERSION " - %a - %t"); } else { - strcpy (str, "DeaDBeeF"); + strcpy (str, "DeaDBeeF-" VERSION); } gtk_window_set_title (GTK_WINDOW (mainwin), str); set_tray_tooltip (str); @@ -645,8 +647,8 @@ update_win_title_idle (gpointer data) { } } else { - gtk_window_set_title (GTK_WINDOW (mainwin), "DeaDBeeF"); - set_tray_tooltip ("DeaDBeeF"); + gtk_window_set_title (GTK_WINDOW (mainwin), "DeaDBeeF-" VERSION); + set_tray_tooltip ("DeaDBeeF-" VERSION); } } // update playlist view @@ -656,6 +658,10 @@ update_win_title_idle (gpointer data) { static gboolean redraw_seekbar_cb (gpointer nothing) { + int iconified = gdk_window_get_state(mainwin->window) & GDK_WINDOW_STATE_ICONIFIED; + if (!GTK_WIDGET_VISIBLE (mainwin) || iconified) { + return FALSE; + } seekbar_redraw (); return FALSE; } @@ -834,6 +840,7 @@ gtkui_thread (void *ctx) { // playlist_refresh (); // ddb_listview_set_vscroll (main_playlist, scroll); + gtk_window_set_title (GTK_WINDOW (mainwin), "DeaDBeeF-" VERSION); gtk_initialized = 1; gtk_main (); cover_art_free (); diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index ef00fa83..f6fce1d2 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -35,14 +35,14 @@ create_mainwin (void) GtkWidget *menuitem1; GtkWidget *menuitem1_menu; GtkWidget *open; - GtkWidget *image368; + GtkWidget *image376; GtkWidget *separator2; GtkWidget *add_files; - GtkWidget *image369; + GtkWidget *image377; GtkWidget *add_folders; - GtkWidget *image370; + GtkWidget *image378; GtkWidget *add_audio_cd; - GtkWidget *image371; + GtkWidget *image379; GtkWidget *add_location1; GtkWidget *separatormenuitem1; GtkWidget *new_playlist1; @@ -51,18 +51,18 @@ create_mainwin (void) GtkWidget *playlist_save_as; GtkWidget *separator8; GtkWidget *quit; - GtkWidget *image372; + GtkWidget *image380; GtkWidget *edit1; GtkWidget *edit1_menu; GtkWidget *clear1; - GtkWidget *image373; + GtkWidget *image381; GtkWidget *select_all1; GtkWidget *deselect_all1; GtkWidget *invert_selection1; GtkWidget *selection1; GtkWidget *selection1_menu; GtkWidget *remove1; - GtkWidget *image374; + GtkWidget *image382; GtkWidget *crop1; GtkWidget *find1; GtkWidget *separator5; @@ -93,14 +93,14 @@ create_mainwin (void) GtkWidget *menuitem4; GtkWidget *menuitem4_menu; GtkWidget *help1; - GtkWidget *image375; + GtkWidget *image383; GtkWidget *changelog1; GtkWidget *separator10; GtkWidget *gpl1; GtkWidget *lgpl1; GtkWidget *separator9; GtkWidget *about1; - GtkWidget *image376; + GtkWidget *image384; GtkWidget *hbox2; GtkWidget *hbox3; GtkWidget *stopbtn; @@ -150,9 +150,9 @@ create_mainwin (void) GDK_O, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - image368 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU); - gtk_widget_show (image368); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image368); + image376 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU); + gtk_widget_show (image376); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image376); separator2 = gtk_separator_menu_item_new (); gtk_widget_show (separator2); @@ -163,25 +163,25 @@ create_mainwin (void) gtk_widget_show (add_files); gtk_container_add (GTK_CONTAINER (menuitem1_menu), add_files); - image369 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); - gtk_widget_show (image369); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image369); + image377 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); + gtk_widget_show (image377); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image377); add_folders = gtk_image_menu_item_new_with_mnemonic ("Add folder(s)"); gtk_widget_show (add_folders); gtk_container_add (GTK_CONTAINER (menuitem1_menu), add_folders); - image370 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); - gtk_widget_show (image370); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image370); + image378 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); + gtk_widget_show (image378); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image378); add_audio_cd = gtk_image_menu_item_new_with_mnemonic ("Add Audio CD"); gtk_widget_show (add_audio_cd); gtk_container_add (GTK_CONTAINER (menuitem1_menu), add_audio_cd); - image371 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); - gtk_widget_show (image371); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_audio_cd), image371); + image379 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); + gtk_widget_show (image379); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_audio_cd), image379); add_location1 = gtk_menu_item_new_with_mnemonic ("Add location"); gtk_widget_show (add_location1); @@ -223,9 +223,9 @@ create_mainwin (void) GDK_Q, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - image372 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU); - gtk_widget_show (image372); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image372); + image380 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU); + gtk_widget_show (image380); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image380); edit1 = gtk_menu_item_new_with_mnemonic ("_Edit"); gtk_widget_show (edit1); @@ -238,9 +238,9 @@ create_mainwin (void) gtk_widget_show (clear1); gtk_container_add (GTK_CONTAINER (edit1_menu), clear1); - image373 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU); - gtk_widget_show (image373); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image373); + image381 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU); + gtk_widget_show (image381); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image381); select_all1 = gtk_menu_item_new_with_mnemonic ("Select all"); gtk_widget_show (select_all1); @@ -252,6 +252,9 @@ create_mainwin (void) deselect_all1 = gtk_menu_item_new_with_mnemonic ("Deselect all"); gtk_widget_show (deselect_all1); gtk_container_add (GTK_CONTAINER (edit1_menu), deselect_all1); + gtk_widget_add_accelerator (deselect_all1, "activate", accel_group, + GDK_Escape, (GdkModifierType) 0, + GTK_ACCEL_VISIBLE); invert_selection1 = gtk_menu_item_new_with_mnemonic ("Invert selection"); gtk_widget_show (invert_selection1); @@ -268,9 +271,9 @@ create_mainwin (void) gtk_widget_show (remove1); gtk_container_add (GTK_CONTAINER (selection1_menu), remove1); - image374 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU); - gtk_widget_show (image374); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image374); + image382 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU); + gtk_widget_show (image382); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image382); crop1 = gtk_menu_item_new_with_mnemonic ("Crop"); gtk_widget_show (crop1); @@ -399,9 +402,9 @@ create_mainwin (void) gtk_widget_show (help1); gtk_container_add (GTK_CONTAINER (menuitem4_menu), help1); - image375 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU); - gtk_widget_show (image375); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image375); + image383 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU); + gtk_widget_show (image383); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image383); changelog1 = gtk_menu_item_new_with_mnemonic ("_ChangeLog"); gtk_widget_show (changelog1); @@ -429,9 +432,9 @@ create_mainwin (void) gtk_widget_show (about1); gtk_container_add (GTK_CONTAINER (menuitem4_menu), about1); - image376 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU); - gtk_widget_show (image376); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about1), image376); + image384 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU); + gtk_widget_show (image384); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about1), image384); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox2); @@ -708,14 +711,14 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, menuitem1, "menuitem1"); GLADE_HOOKUP_OBJECT (mainwin, menuitem1_menu, "menuitem1_menu"); GLADE_HOOKUP_OBJECT (mainwin, open, "open"); - GLADE_HOOKUP_OBJECT (mainwin, image368, "image368"); + GLADE_HOOKUP_OBJECT (mainwin, image376, "image376"); GLADE_HOOKUP_OBJECT (mainwin, separator2, "separator2"); GLADE_HOOKUP_OBJECT (mainwin, add_files, "add_files"); - GLADE_HOOKUP_OBJECT (mainwin, image369, "image369"); + GLADE_HOOKUP_OBJECT (mainwin, image377, "image377"); GLADE_HOOKUP_OBJECT (mainwin, add_folders, "add_folders"); - GLADE_HOOKUP_OBJECT (mainwin, image370, "image370"); + GLADE_HOOKUP_OBJECT (mainwin, image378, "image378"); GLADE_HOOKUP_OBJECT (mainwin, add_audio_cd, "add_audio_cd"); - GLADE_HOOKUP_OBJECT (mainwin, image371, "image371"); + GLADE_HOOKUP_OBJECT (mainwin, image379, "image379"); GLADE_HOOKUP_OBJECT (mainwin, add_location1, "add_location1"); GLADE_HOOKUP_OBJECT (mainwin, separatormenuitem1, "separatormenuitem1"); GLADE_HOOKUP_OBJECT (mainwin, new_playlist1, "new_playlist1"); @@ -724,18 +727,18 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, playlist_save_as, "playlist_save_as"); GLADE_HOOKUP_OBJECT (mainwin, separator8, "separator8"); GLADE_HOOKUP_OBJECT (mainwin, quit, "quit"); - GLADE_HOOKUP_OBJECT (mainwin, image372, "image372"); + GLADE_HOOKUP_OBJECT (mainwin, image380, "image380"); GLADE_HOOKUP_OBJECT (mainwin, edit1, "edit1"); GLADE_HOOKUP_OBJECT (mainwin, edit1_menu, "edit1_menu"); GLADE_HOOKUP_OBJECT (mainwin, clear1, "clear1"); - GLADE_HOOKUP_OBJECT (mainwin, image373, "image373"); + GLADE_HOOKUP_OBJECT (mainwin, image381, "image381"); GLADE_HOOKUP_OBJECT (mainwin, select_all1, "select_all1"); GLADE_HOOKUP_OBJECT (mainwin, deselect_all1, "deselect_all1"); GLADE_HOOKUP_OBJECT (mainwin, invert_selection1, "invert_selection1"); GLADE_HOOKUP_OBJECT (mainwin, selection1, "selection1"); GLADE_HOOKUP_OBJECT (mainwin, selection1_menu, "selection1_menu"); GLADE_HOOKUP_OBJECT (mainwin, remove1, "remove1"); - GLADE_HOOKUP_OBJECT (mainwin, image374, "image374"); + GLADE_HOOKUP_OBJECT (mainwin, image382, "image382"); GLADE_HOOKUP_OBJECT (mainwin, crop1, "crop1"); GLADE_HOOKUP_OBJECT (mainwin, find1, "find1"); GLADE_HOOKUP_OBJECT (mainwin, separator5, "separator5"); @@ -764,14 +767,14 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, menuitem4, "menuitem4"); GLADE_HOOKUP_OBJECT (mainwin, menuitem4_menu, "menuitem4_menu"); GLADE_HOOKUP_OBJECT (mainwin, help1, "help1"); - GLADE_HOOKUP_OBJECT (mainwin, image375, "image375"); + GLADE_HOOKUP_OBJECT (mainwin, image383, "image383"); GLADE_HOOKUP_OBJECT (mainwin, changelog1, "changelog1"); GLADE_HOOKUP_OBJECT (mainwin, separator10, "separator10"); GLADE_HOOKUP_OBJECT (mainwin, gpl1, "gpl1"); GLADE_HOOKUP_OBJECT (mainwin, lgpl1, "lgpl1"); GLADE_HOOKUP_OBJECT (mainwin, separator9, "separator9"); GLADE_HOOKUP_OBJECT (mainwin, about1, "about1"); - GLADE_HOOKUP_OBJECT (mainwin, image376, "image376"); + GLADE_HOOKUP_OBJECT (mainwin, image384, "image384"); GLADE_HOOKUP_OBJECT (mainwin, hbox2, "hbox2"); GLADE_HOOKUP_OBJECT (mainwin, hbox3, "hbox3"); GLADE_HOOKUP_OBJECT (mainwin, stopbtn, "stopbtn"); diff --git a/plugins/gtkui/plcommon.c b/plugins/gtkui/plcommon.c index 79ca1994..e1a18363 100644 --- a/plugins/gtkui/plcommon.c +++ b/plugins/gtkui/plcommon.c @@ -18,6 +18,7 @@ */ #include <stdlib.h> #include <string.h> +#include <unistd.h> #include "gtkui.h" #include "plcommon.h" #include "coverart.h" @@ -295,6 +296,43 @@ on_remove2_activate (GtkMenuItem *menuitem, } void +on_remove_from_disk_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + GtkWidget *widget = GTK_WIDGET (menuitem); + + GtkWidget *dlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, "Delete files from disk"); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dlg), "Files will be lost. Proceed?"); + gtk_window_set_title (GTK_WINDOW (dlg), "Warning"); + + int response = gtk_dialog_run (GTK_DIALOG (dlg)); + gtk_widget_destroy (dlg); + if (response != GTK_RESPONSE_YES) { + return; + } + + deadbeef->pl_lock (); + deadbeef->plt_lock (); + + DB_playItem_t *it = deadbeef->pl_get_first (PL_MAIN); + while (it) { + if (deadbeef->pl_is_selected (it) && deadbeef->is_local_file (it->fname)) { + unlink (it->fname); + } + DB_playItem_t *next = deadbeef->pl_get_next (it, PL_MAIN); + deadbeef->pl_item_unref (it); + it = next; + } + + int cursor = deadbeef->pl_delete_selected (); + deadbeef->plt_unlock (); + deadbeef->pl_unlock (); + + main_refresh (); + search_refresh (); +} + +void list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) { clicked_idx = deadbeef->pl_get_idx_of (it); int inqueue = deadbeef->pl_playqueue_test (it); @@ -303,6 +341,7 @@ list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) { GtkWidget *remove_from_playback_queue1; GtkWidget *separator9; GtkWidget *remove2; + GtkWidget *remove_from_disk; GtkWidget *separator8; GtkWidget *properties1; GtkWidget *reload_metadata; @@ -337,6 +376,11 @@ list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) { gtk_container_add (GTK_CONTAINER (playlist_menu), remove2); gtk_object_set_data (GTK_OBJECT (remove2), "ps", listview); + remove_from_disk = gtk_menu_item_new_with_mnemonic ("Remove from disk"); + gtk_widget_show (remove_from_disk); + gtk_container_add (GTK_CONTAINER (playlist_menu), remove_from_disk); + gtk_object_set_data (GTK_OBJECT (remove_from_disk), "ps", listview); + separator8 = gtk_separator_menu_item_new (); gtk_widget_show (separator8); gtk_container_add (GTK_CONTAINER (playlist_menu), separator8); @@ -359,6 +403,9 @@ list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) { g_signal_connect ((gpointer) remove2, "activate", G_CALLBACK (on_remove2_activate), NULL); + g_signal_connect ((gpointer) remove_from_disk, "activate", + G_CALLBACK (on_remove_from_disk_activate), + NULL); g_signal_connect ((gpointer) properties1, "activate", G_CALLBACK (main_properties_activate), NULL); diff --git a/plugins/gtkui/search.c b/plugins/gtkui/search.c index cfffa284..399cef1e 100644 --- a/plugins/gtkui/search.c +++ b/plugins/gtkui/search.c @@ -381,7 +381,7 @@ void search_handle_doubleclick (DdbListview *listview, DdbListviewIter iter, int } void search_selection_changed (DdbListviewIter it, int idx) { - DdbListview *main = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")); + DdbListview *main = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); ddb_listview_draw_row (main, main_get_idx ((DB_playItem_t *)it), it); } @@ -456,46 +456,5 @@ search_playlist_init (GtkWidget *widget) { } } lock_column_config = 0; -#if 0 - extern GtkWidget *searchwin; - // init playlist control structure, and put it into widget user-data - memset (&search_playlist, 0, sizeof (search_playlist)); - search_playlist.title = "search"; - search_playlist.playlist = widget; - search_playlist.header = lookup_widget (searchwin, "searchheader"); - search_playlist.scrollbar = lookup_widget (searchwin, "searchscroll"); - search_playlist.hscrollbar = lookup_widget (searchwin, "searchhscroll"); - assert (search_playlist.header); - assert (search_playlist.scrollbar); -// search_playlist.pcurr = &search_current; -// search_playlist.pcount = &search_count; - search_playlist.get_count = search_get_count; -// search_playlist.multisel = 0; - search_playlist.iterator = PL_SEARCH; - search_playlist.scrollpos = 0; - search_playlist.hscrollpos = 0; -// search_playlist.row = -1; - search_playlist.clicktime = -1; - search_playlist.nvisiblerows = 0; - - // create default set of columns - DB_conf_item_t *col = deadbeef->conf_find ("search.column.", NULL); - if (!col) { - gtkpl_column_append (&search_playlist, gtkpl_column_alloc ("Artist / Album", 150, DB_COLUMN_ARTIST_ALBUM, NULL, 0)); - gtkpl_column_append (&search_playlist, gtkpl_column_alloc ("Track №", 50, DB_COLUMN_TRACK, NULL, 1)); - gtkpl_column_append (&search_playlist, gtkpl_column_alloc ("Title / Track Artist", 150, DB_COLUMN_TITLE, NULL, 0)); - gtkpl_column_append (&search_playlist, gtkpl_column_alloc ("Duration", 50, DB_COLUMN_DURATION, NULL, 0)); - } - else { - while (col) { - gtkpl_append_column_from_textdef (&search_playlist, col->value); - col = deadbeef->conf_find ("search.column.", col); - } - } - gtk_object_set_data (GTK_OBJECT (search_playlist.playlist), "ps", &search_playlist); - gtk_object_set_data (GTK_OBJECT (search_playlist.header), "ps", &search_playlist); - gtk_object_set_data (GTK_OBJECT (search_playlist.scrollbar), "ps", &search_playlist); - gtk_object_set_data (GTK_OBJECT (search_playlist.hscrollbar), "ps", &search_playlist); -#endif } diff --git a/plugins/gtkui/trkproperties.c b/plugins/gtkui/trkproperties.c index 481cdc8c..73f55061 100644 --- a/plugins/gtkui/trkproperties.c +++ b/plugins/gtkui/trkproperties.c @@ -19,6 +19,7 @@ #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include <string.h> +#include "ddblistview.h" #include "trkproperties.h" #include "interface.h" #include "support.h" @@ -27,12 +28,14 @@ static GtkWidget *trackproperties; static DB_playItem_t *track; +static GtkCellRenderer *rend_text2; gboolean on_trackproperties_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { + rend_text2 = NULL; trackproperties = NULL; if (track) { deadbeef->pl_item_unref (track); @@ -47,11 +50,7 @@ on_trackproperties_key_press_event (GtkWidget *widget, gpointer user_data) { if (event->keyval == GDK_Escape) { - trackproperties = NULL; - if (track) { - deadbeef->pl_item_unref (track); - track = NULL; - } + on_trackproperties_delete_event (NULL, NULL, NULL); gtk_widget_destroy (widget); } return FALSE; @@ -62,12 +61,9 @@ on_closebtn_clicked (GtkButton *button, gpointer user_data) { if (trackproperties) { - if (track) { - deadbeef->pl_item_unref (track); - track = NULL; - } - gtk_widget_destroy (trackproperties); - trackproperties = NULL; + GtkWidget *w = trackproperties; + on_trackproperties_delete_event (NULL, NULL, NULL); + gtk_widget_destroy (w); } } @@ -106,10 +102,59 @@ show_track_properties_dlg (DB_playItem_t *it) { } track = it; + + int allow_editing = 0; + + if (deadbeef->is_local_file (it->fname)) { + // get decoder plugin by id + DB_decoder_t *dec = NULL; + if (it->decoder_id) { + DB_decoder_t **decoders = deadbeef->plug_get_decoder_list (); + for (int i = 0; decoders[i]; i++) { + if (!strcmp (decoders[i]->plugin.id, it->decoder_id)) { + dec = decoders[i]; + break; + } + } + } + + if (dec && dec->write_metadata && deadbeef->conf_get_int ("enable_tag_writing", 0)) { + allow_editing = 1; + } + } + + GtkTreeView *tree; + GtkListStore *store; if (!trackproperties) { trackproperties = create_trackproperties (); gtk_window_set_transient_for (GTK_WINDOW (trackproperties), GTK_WINDOW (mainwin)); + tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist")); + store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + GtkCellRenderer *rend_text = gtk_cell_renderer_text_new (); + rend_text2 = gtk_cell_renderer_text_new (); + g_signal_connect ((gpointer)rend_text2, "edited", + G_CALLBACK (on_metadata_edited), + store); + GtkTreeViewColumn *col1 = gtk_tree_view_column_new_with_attributes ("Key", rend_text, "text", 0, NULL); + GtkTreeViewColumn *col2 = gtk_tree_view_column_new_with_attributes ("Value", rend_text2, "text", 1, NULL); + gtk_tree_view_append_column (tree, col1); + gtk_tree_view_append_column (tree, col2); + } + else { + tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist")); + store = GTK_LIST_STORE (gtk_tree_view_get_model (tree)); + + // remove everything from store + gtk_list_store_clear (store); + } + + if (allow_editing) { + g_object_set (G_OBJECT (rend_text2), "editable", TRUE, NULL); } + else { + g_object_set (G_OBJECT (rend_text2), "editable", FALSE, NULL); + } + GtkWidget *widget = trackproperties; GtkWidget *w; const char *meta; @@ -117,19 +162,6 @@ show_track_properties_dlg (DB_playItem_t *it) { w = lookup_widget (widget, "location"); gtk_entry_set_text (GTK_ENTRY (w), it->fname); - GtkTreeView *tree = GTK_TREE_VIEW (lookup_widget (widget, "metalist")); - GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); - GtkCellRenderer *rend_text = gtk_cell_renderer_text_new (); - GtkCellRenderer *rend_text2 = gtk_cell_renderer_text_new (); - g_object_set (G_OBJECT (rend_text2), "editable", TRUE, NULL); - g_signal_connect ((gpointer)rend_text2, "edited", - G_CALLBACK (on_metadata_edited), - store); - GtkTreeViewColumn *col1 = gtk_tree_view_column_new_with_attributes ("Key", rend_text, "text", 0, NULL); - GtkTreeViewColumn *col2 = gtk_tree_view_column_new_with_attributes ("Value", rend_text2, "text", 1, NULL); - gtk_tree_view_append_column (tree, col1); - gtk_tree_view_append_column (tree, col2); - deadbeef->pl_lock (); int i = 0; while (types[i]) { @@ -145,19 +177,7 @@ show_track_properties_dlg (DB_playItem_t *it) { } deadbeef->pl_unlock (); - // get decoder plugin by id - DB_decoder_t *dec = NULL; - if (it->decoder_id) { - DB_decoder_t **decoders = deadbeef->plug_get_decoder_list (); - for (int i = 0; decoders[i]; i++) { - if (!strcmp (decoders[i]->plugin.id, it->decoder_id)) { - dec = decoders[i]; - break; - } - } - } - - if (dec && dec->write_metadata && deadbeef->conf_get_int ("enable_tag_writing", 0)) { + if (allow_editing) { gtk_widget_set_sensitive (lookup_widget (widget, "write_tags"), TRUE); } else { @@ -211,6 +231,7 @@ on_write_tags_clicked (GtkButton *button, GtkTreeModel *model = GTK_TREE_MODEL (gtk_tree_view_get_model (tree)); gtk_tree_model_foreach (model, set_metadata_cb, track); dec->write_metadata (track); + ddb_listview_refresh (DDB_LISTVIEW (lookup_widget (mainwin, "playlist")), DDB_REFRESH_LIST); } break; } |