summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-12-28 20:37:03 +0100
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-12-28 20:37:03 +0100
commit04a379e7ea25c8d177dae83753cba6bba886b8d0 (patch)
tree32c383c73de35a9b7e422dbc6442428bada1cc9b /plugins
parentb2ce4f7aa48f17cc6587cf18cdd9d2a44fd5cfeb (diff)
remember/restore search window geometry
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/callbacks.c12
-rw-r--r--plugins/gtkui/callbacks.h10
-rw-r--r--plugins/gtkui/deadbeef.glade2
-rw-r--r--plugins/gtkui/interface.c6
-rw-r--r--plugins/gtkui/search.c72
-rw-r--r--plugins/gtkui/search.h3
6 files changed, 100 insertions, 5 deletions
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c
index efa71308..f6545d5b 100644
--- a/plugins/gtkui/callbacks.c
+++ b/plugins/gtkui/callbacks.c
@@ -1262,15 +1262,15 @@ on_mainwin_configure_event (GtkWidget *widget,
gpointer user_data)
{
#if GTK_CHECK_VERSION(2,2,0)
- GdkWindowState window_state = gdk_window_get_state (GDK_WINDOW (mainwin->window));
+ GdkWindowState window_state = gdk_window_get_state (GDK_WINDOW (widget->window));
#else
- GdkWindowState window_state = gdk_window_get_state (G_OBJECT (mainwin));
+ GdkWindowState window_state = gdk_window_get_state (G_OBJECT (widget));
#endif
- if (!(window_state & GDK_WINDOW_STATE_MAXIMIZED) && GTK_WIDGET_VISIBLE (mainwin)) {
+ if (!(window_state & GDK_WINDOW_STATE_MAXIMIZED) && GTK_WIDGET_VISIBLE (widget)) {
int x, y;
int w, h;
- gtk_window_get_position (GTK_WINDOW (mainwin), &x, &y);
- gtk_window_get_size (GTK_WINDOW (mainwin), &w, &h);
+ gtk_window_get_position (GTK_WINDOW (widget), &x, &y);
+ gtk_window_get_size (GTK_WINDOW (widget), &w, &h);
deadbeef->conf_set_int ("mainwin.geometry.x", x);
deadbeef->conf_set_int ("mainwin.geometry.y", y);
deadbeef->conf_set_int ("mainwin.geometry.w", w);
@@ -1293,6 +1293,7 @@ on_find_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
search_start ();
+ search_restore_attrs ();
}
void
@@ -2272,3 +2273,4 @@ on_cursor_follows_playback_activate (GtkMenuItem *menuitem,
deadbeef->conf_set_int ("playlist.scroll.cursorfollowplayback", gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem)));
}
+
diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h
index 188cfe8a..0ce5cf49 100644
--- a/plugins/gtkui/callbacks.h
+++ b/plugins/gtkui/callbacks.h
@@ -759,3 +759,13 @@ on_format_ok_clicked (GtkButton *button,
void
on_cursor_follows_playback_activate (GtkMenuItem *menuitem,
gpointer user_data);
+
+gboolean
+on_searchwin_configure_event (GtkWidget *widget,
+ GdkEventConfigure *event,
+ gpointer user_data);
+
+gboolean
+on_searchwin_window_state_event (GtkWidget *widget,
+ GdkEventWindowState *event,
+ gpointer user_data);
diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade
index 6371a93d..4bbefffe 100644
--- a/plugins/gtkui/deadbeef.glade
+++ b/plugins/gtkui/deadbeef.glade
@@ -914,6 +914,8 @@
<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"/>
<signal name="delete_event" handler="gtk_widget_hide_on_delete" last_modification_time="Sat, 08 Aug 2009 23:03:33 GMT"/>
+ <signal name="configure_event" handler="on_searchwin_configure_event" last_modification_time="Mon, 28 Dec 2009 19:24:44 GMT"/>
+ <signal name="window_state_event" handler="on_searchwin_window_state_event" last_modification_time="Mon, 28 Dec 2009 19:26:50 GMT"/>
<child>
<widget class="GtkVBox" id="vbox4">
diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c
index c7d4b14f..b0869d0d 100644
--- a/plugins/gtkui/interface.c
+++ b/plugins/gtkui/interface.c
@@ -900,6 +900,12 @@ create_searchwin (void)
g_signal_connect ((gpointer) searchwin, "delete_event",
G_CALLBACK (gtk_widget_hide_on_delete),
NULL);
+ g_signal_connect ((gpointer) searchwin, "configure_event",
+ G_CALLBACK (on_searchwin_configure_event),
+ NULL);
+ g_signal_connect ((gpointer) searchwin, "window_state_event",
+ G_CALLBACK (on_searchwin_window_state_event),
+ NULL);
g_signal_connect ((gpointer) searchentry, "changed",
G_CALLBACK (on_searchentry_changed),
NULL);
diff --git a/plugins/gtkui/search.c b/plugins/gtkui/search.c
index bdb0d13c..1fe382af 100644
--- a/plugins/gtkui/search.c
+++ b/plugins/gtkui/search.c
@@ -52,6 +52,23 @@ struct playItem_s *search_current = NULL;
int search_count = 0;
void
+search_restore_attrs (void) {
+ int x = deadbeef->conf_get_int ("searchwin.geometry.x", -1);
+ int y = deadbeef->conf_get_int ("searchwin.geometry.y", -1);
+ int w = deadbeef->conf_get_int ("searchwin.geometry.w", 500);
+ int h = deadbeef->conf_get_int ("searchwin.geometry.h", 300);
+ gtk_widget_show (searchwin);
+ if (x != -1 && y != -1) {
+ gtk_window_move (GTK_WINDOW (searchwin), x, y);
+ gtk_window_resize (GTK_WINDOW (searchwin), w, h);
+ if (deadbeef->conf_get_int ("searchwin.geometry.maximized", 0)) {
+ gtk_window_maximize (GTK_WINDOW (searchwin));
+ }
+ gtk_window_present (GTK_WINDOW (searchwin));
+ }
+}
+
+void
search_start (void) {
gtk_entry_set_text (GTK_ENTRY (lookup_widget (searchwin, "searchentry")), "");
gtk_widget_show (searchwin);
@@ -190,3 +207,58 @@ on_searchlist_configure_event (GtkWidget *widget,
return FALSE;
}
+gboolean
+on_searchwin_configure_event (GtkWidget *widget,
+ GdkEventConfigure *event,
+ gpointer user_data)
+{
+#if GTK_CHECK_VERSION(2,2,0)
+ GdkWindowState window_state = gdk_window_get_state (GDK_WINDOW (widget->window));
+#else
+ GdkWindowState window_state = gdk_window_get_state (G_OBJECT (widget));
+#endif
+ if (!(window_state & GDK_WINDOW_STATE_MAXIMIZED) && GTK_WIDGET_VISIBLE (widget)) {
+ int x, y;
+ int w, h;
+ gtk_window_get_position (GTK_WINDOW (widget), &x, &y);
+ gtk_window_get_size (GTK_WINDOW (widget), &w, &h);
+ deadbeef->conf_set_int ("searchwin.geometry.x", x);
+ deadbeef->conf_set_int ("searchwin.geometry.y", y);
+ deadbeef->conf_set_int ("searchwin.geometry.w", w);
+ deadbeef->conf_set_int ("searchwin.geometry.h", h);
+ }
+ return FALSE;
+}
+
+gboolean
+on_searchwin_window_state_event (GtkWidget *widget,
+ GdkEventWindowState *event,
+ gpointer user_data)
+{
+ if (!GTK_WIDGET_VISIBLE (widget)) {
+ return FALSE;
+ }
+ // based on pidgin maximization handler
+#if GTK_CHECK_VERSION(2,2,0)
+ if (event->changed_mask & GDK_WINDOW_STATE_MAXIMIZED) {
+ if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) {
+ deadbeef->conf_set_int ("searchwin.geometry.maximized", 1);
+ }
+ else {
+ deadbeef->conf_set_int ("searchwin.geometry.maximized", 0);
+ }
+ }
+#else
+ GdkWindowState new_window_state = gdk_window_get_state(G_OBJECT(widget));
+
+ if ()
+ if (new_window_state & GDK_WINDOW_STATE_MAXIMIZED) {
+ deadbeef->conf_set_int ("searchwin.geometry.maximized", 1);
+ }
+ else {
+ deadbeef->conf_set_int ("searchwin.geometry.maximized", 0);
+ }
+#endif
+ return FALSE;
+}
+
diff --git a/plugins/gtkui/search.h b/plugins/gtkui/search.h
index 32d45e07..15f61831 100644
--- a/plugins/gtkui/search.h
+++ b/plugins/gtkui/search.h
@@ -28,4 +28,7 @@ search_start (void);
void
search_refresh (void);
+void
+search_restore_attrs (void);
+
#endif // __SEARCH_H