summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Jamfile2
-rw-r--r--callbacks.c6
-rw-r--r--callbacks.h9
-rw-r--r--deadbeef.glade116
-rw-r--r--gtkplaylist.c9
-rw-r--r--interface.c75
-rw-r--r--interface.h1
-rw-r--r--search.c58
-rw-r--r--search.h24
9 files changed, 293 insertions, 7 deletions
diff --git a/Jamfile b/Jamfile
index e2e10273..93169ee3 100644
--- a/Jamfile
+++ b/Jamfile
@@ -22,7 +22,7 @@ HDRS += $(ROOT)/sidplay-libs-2.1.0/libsidplay/include ;
HDRS += $(ROOT)/sidplay-libs-2.1.0/builders/resid-builder/include ;
Main deadbeef :
- codec.c cvorbis.c cmp3.c cgme.c cdumb.c cwav.c cflac.c csid.cpp playlist.c palsa.c streamer.c md5/md5.c main.c support.c interface.c callbacks.c threading_pthread.c messagepump.c gtkplaylist.c ;
+ codec.c cvorbis.c cmp3.c cgme.c cdumb.c cwav.c cflac.c csid.cpp playlist.c palsa.c streamer.c md5/md5.c main.c support.c interface.c callbacks.c threading_pthread.c messagepump.c gtkplaylist.c search.c ;
LINKLIBS on deadbeef = -lm -lvorbis -logg -lvorbisfile -lmad -lFLAC -lsamplerate -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lgthread-2.0 -lstdc++ -lasound ;
diff --git a/callbacks.c b/callbacks.c
index 8b753cc3..5e4a7744 100644
--- a/callbacks.c
+++ b/callbacks.c
@@ -561,11 +561,6 @@ on_voice5_clicked (GtkButton *button,
codec_unlock ();
}
-
-
-
-
-
void
on_order_linear_activate (GtkMenuItem *menuitem,
gpointer user_data)
@@ -613,3 +608,4 @@ on_loop_disable_activate (GtkMenuItem *menuitem,
ps_set_loop_mode (1);
}
+
diff --git a/callbacks.h b/callbacks.h
index 03a81f50..3a2f9d8d 100644
--- a/callbacks.h
+++ b/callbacks.h
@@ -274,3 +274,12 @@ on_loop_single_activate (GtkMenuItem *menuitem,
void
on_loop_disable_activate (GtkMenuItem *menuitem,
gpointer user_data);
+
+gboolean
+on_searchwin_key_press_event (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer user_data);
+
+void
+on_searchentry_changed (GtkEditable *editable,
+ gpointer user_data);
diff --git a/deadbeef.glade b/deadbeef.glade
index 8ecb0a90..129b5609 100644
--- a/deadbeef.glade
+++ b/deadbeef.glade
@@ -1498,4 +1498,120 @@ Public License instead of this License. But first, please read
<property name="translator_credits" translatable="yes" comments="TRANSLATORS: Replace this string with your names, one name per line.">translator-credits</property>
</widget>
+<widget class="GtkWindow" id="searchwin">
+ <property name="width_request">300</property>
+ <property name="height_request">150</property>
+ <property name="visible">True</property>
+ <property name="events">GDK_KEY_PRESS_MASK</property>
+ <property name="title" translatable="yes">Search</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</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">True</property>
+ <property name="skip_pager_hint">True</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <signal name="key_press_event" handler="on_searchwin_key_press_event" last_modification_time="Sat, 08 Aug 2009 18:19:17 GMT"/>
+
+ <child>
+ <widget class="GtkVBox" id="vbox4">
+ <property name="border_width">4</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkEntry" id="searchentry">
+ <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">True</property>
+ <signal name="changed" handler="on_searchentry_changed" last_modification_time="Sat, 08 Aug 2009 18:18:17 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox6">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox5">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkDrawingArea" id="searchheader">
+ <property name="height_request">24</property>
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkDrawingArea" id="searchlist">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK</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>
+
+ <child>
+ <widget class="GtkVScrollbar" id="searchscroll">
+ <property name="visible">True</property>
+ <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+ <property name="inverted">False</property>
+ <property name="adjustment">0 0 0 0 0 0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</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>
+
</glade-interface>
diff --git a/gtkplaylist.c b/gtkplaylist.c
index 2d19d397..2742c222 100644
--- a/gtkplaylist.c
+++ b/gtkplaylist.c
@@ -38,6 +38,7 @@
#include "messagepump.h"
#include "messages.h"
#include "streamer.h"
+#include "search.h"
extern GtkWidget *mainwin;
static GdkPixmap *backbuf;
@@ -864,7 +865,10 @@ gtkps_keypress (int keyval, int state) {
GtkWidget *range = lookup_widget (mainwin, "playscroll");
int prev = playlist_row;
int newscroll = scrollpos;
- if ((keyval == GDK_A || keyval == GDK_a) && (state & GDK_CONTROL_MASK)) {
+ if ((keyval == GDK_F || keyval == GDK_f) && (state & GDK_CONTROL_MASK)) {
+ search_start ();
+ }
+ else if ((keyval == GDK_A || keyval == GDK_a) && (state & GDK_CONTROL_MASK)) {
// select all
for (playItem_t *it = playlist_head; it; it = it->next) {
it->selected = 1;
@@ -1139,6 +1143,7 @@ gtkps_add_fm_dropped_files (char *ptr, int length, int drop_y) {
gtk_widget_set_sensitive (GTK_WIDGET (e), FALSE);
gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (d))), e);
gtk_widget_show_all (d);
+ gtk_window_present (GTK_WINDOW (d));
GDK_THREADS_LEAVE();
int drop_row = drop_y / rowheight + scrollpos;
@@ -1389,6 +1394,7 @@ gtkps_add_dir (char *folder) {
gtk_widget_set_sensitive (GTK_WIDGET (e), FALSE);
gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (d))), e);
gtk_widget_show_all (d);
+ gtk_window_present (GTK_WINDOW (d));
GDK_THREADS_LEAVE();
ps_add_dir (folder, gtkps_add_file_info_cb, e);
g_free (folder);
@@ -1420,6 +1426,7 @@ gtkps_add_files (GSList *lst) {
gtk_widget_set_sensitive (GTK_WIDGET (e), FALSE);
gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (d))), e);
gtk_widget_show_all (d);
+ gtk_window_present (GTK_WINDOW (d));
GDK_THREADS_LEAVE();
g_slist_foreach(lst, gtkps_addfile_cb, e);
g_slist_free (lst);
diff --git a/interface.c b/interface.c
index b7021ead..c3165ffa 100644
--- a/interface.c
+++ b/interface.c
@@ -676,3 +676,78 @@ create_aboutdialog (void)
return aboutdialog;
}
+GtkWidget*
+create_searchwin (void)
+{
+ GtkWidget *searchwin;
+ GtkWidget *vbox4;
+ GtkWidget *searchentry;
+ GtkWidget *hbox6;
+ GtkWidget *vbox5;
+ GtkWidget *searchheader;
+ GtkWidget *searchlist;
+ GtkWidget *searchscroll;
+
+ searchwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request (searchwin, 300, 150);
+ gtk_widget_set_events (searchwin, GDK_KEY_PRESS_MASK);
+ gtk_window_set_title (GTK_WINDOW (searchwin), "Search");
+ gtk_window_set_position (GTK_WINDOW (searchwin), GTK_WIN_POS_CENTER_ON_PARENT);
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (searchwin), TRUE);
+ gtk_window_set_skip_pager_hint (GTK_WINDOW (searchwin), TRUE);
+
+ vbox4 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox4);
+ gtk_container_add (GTK_CONTAINER (searchwin), vbox4);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox4), 4);
+
+ searchentry = gtk_entry_new ();
+ gtk_widget_show (searchentry);
+ gtk_box_pack_start (GTK_BOX (vbox4), searchentry, FALSE, FALSE, 0);
+ gtk_entry_set_invisible_char (GTK_ENTRY (searchentry), 8226);
+ gtk_entry_set_activates_default (GTK_ENTRY (searchentry), TRUE);
+
+ hbox6 = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox6);
+ gtk_box_pack_start (GTK_BOX (vbox4), hbox6, TRUE, TRUE, 0);
+
+ vbox5 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox5);
+ gtk_box_pack_start (GTK_BOX (hbox6), vbox5, TRUE, TRUE, 0);
+
+ searchheader = gtk_drawing_area_new ();
+ gtk_widget_show (searchheader);
+ gtk_box_pack_start (GTK_BOX (vbox5), searchheader, FALSE, TRUE, 0);
+ gtk_widget_set_size_request (searchheader, -1, 24);
+
+ searchlist = gtk_drawing_area_new ();
+ gtk_widget_show (searchlist);
+ gtk_box_pack_start (GTK_BOX (vbox5), searchlist, TRUE, TRUE, 0);
+ GTK_WIDGET_SET_FLAGS (searchlist, GTK_CAN_DEFAULT);
+ gtk_widget_set_events (searchlist, GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
+
+ searchscroll = gtk_vscrollbar_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 0, 0, 0, 0)));
+ gtk_widget_show (searchscroll);
+ gtk_box_pack_start (GTK_BOX (hbox6), searchscroll, FALSE, TRUE, 0);
+
+ g_signal_connect ((gpointer) searchwin, "key_press_event",
+ G_CALLBACK (on_searchwin_key_press_event),
+ NULL);
+ g_signal_connect ((gpointer) searchentry, "changed",
+ G_CALLBACK (on_searchentry_changed),
+ NULL);
+
+ /* Store pointers to all widgets, for use by lookup_widget(). */
+ GLADE_HOOKUP_OBJECT_NO_REF (searchwin, searchwin, "searchwin");
+ GLADE_HOOKUP_OBJECT (searchwin, vbox4, "vbox4");
+ GLADE_HOOKUP_OBJECT (searchwin, searchentry, "searchentry");
+ GLADE_HOOKUP_OBJECT (searchwin, hbox6, "hbox6");
+ GLADE_HOOKUP_OBJECT (searchwin, vbox5, "vbox5");
+ GLADE_HOOKUP_OBJECT (searchwin, searchheader, "searchheader");
+ GLADE_HOOKUP_OBJECT (searchwin, searchlist, "searchlist");
+ GLADE_HOOKUP_OBJECT (searchwin, searchscroll, "searchscroll");
+
+ gtk_widget_grab_default (searchlist);
+ return searchwin;
+}
+
diff --git a/interface.h b/interface.h
index 51c7f733..e399ef4e 100644
--- a/interface.h
+++ b/interface.h
@@ -4,3 +4,4 @@
GtkWidget* create_mainwin (void);
GtkWidget* create_aboutdialog (void);
+GtkWidget* create_searchwin (void);
diff --git a/search.c b/search.c
new file mode 100644
index 00000000..61248d22
--- /dev/null
+++ b/search.c
@@ -0,0 +1,58 @@
+/*
+ DeaDBeeF - ultimate music player for GNU/Linux systems with X11
+ Copyright (C) 2009 Alexey Yakovenko
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "callbacks.h"
+#include "interface.h"
+#include "support.h"
+
+#include "search.h"
+
+static GtkWidget *searchwin = NULL;
+
+void
+search_start (void) {
+ if (!searchwin) {
+ searchwin = create_searchwin ();
+ }
+ gtk_widget_show (searchwin);
+ gtk_window_present (GTK_WINDOW (searchwin));
+}
+
+gboolean
+on_searchwin_key_press_event (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer user_data)
+{
+ return FALSE;
+}
+
+
+void
+on_searchentry_changed (GtkEditable *editable,
+ gpointer user_data)
+{
+}
+
diff --git a/search.h b/search.h
new file mode 100644
index 00000000..b90e1903
--- /dev/null
+++ b/search.h
@@ -0,0 +1,24 @@
+/*
+ DeaDBeeF - ultimate music player for GNU/Linux systems with X11
+ Copyright (C) 2009 Alexey Yakovenko
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef __SEARCH_H
+#define __SEARCH_H
+
+void
+search_start (void);
+
+#endif // __SEARCH_H