summaryrefslogtreecommitdiff
path: root/plugins/gtkui
diff options
context:
space:
mode:
authorGravatar Viktor Semykin <thesame.ml@gmail.com>2010-04-06 22:19:35 +0300
committerGravatar Viktor Semykin <thesame.ml@gmail.com>2010-04-06 22:19:35 +0300
commit823669afef8942b45960391f2f3d732ab1ad06e3 (patch)
tree067ad15823314a39d5c9d15878c9367b826bccac /plugins/gtkui
parent6dbd7dd11bccc0ce7507e7b4b195517f123e8694 (diff)
parent9c6e2108adbcedccee5a2984b1d8ffc57e6b1087 (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.c2
-rw-r--r--plugins/gtkui/coverart.c9
-rw-r--r--plugins/gtkui/ddblistview.c2
-rw-r--r--plugins/gtkui/ddbtabstrip.c8
-rw-r--r--plugins/gtkui/deadbeef.glade19
-rw-r--r--plugins/gtkui/fileman.c3
-rw-r--r--plugins/gtkui/gtkui.c19
-rw-r--r--plugins/gtkui/interface.c93
-rw-r--r--plugins/gtkui/plcommon.c47
-rw-r--r--plugins/gtkui/search.c43
-rw-r--r--plugins/gtkui/trkproperties.c95
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;
}