From 04a379e7ea25c8d177dae83753cba6bba886b8d0 Mon Sep 17 00:00:00 2001 From: Alexey Yakovenko Date: Mon, 28 Dec 2009 20:37:03 +0100 Subject: remember/restore search window geometry --- plugins/gtkui/callbacks.c | 12 +++++--- plugins/gtkui/callbacks.h | 10 ++++++ plugins/gtkui/deadbeef.glade | 2 ++ plugins/gtkui/interface.c | 6 ++++ plugins/gtkui/search.c | 72 ++++++++++++++++++++++++++++++++++++++++++++ plugins/gtkui/search.h | 3 ++ 6 files changed, 100 insertions(+), 5 deletions(-) (limited to 'plugins/gtkui') 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 @@ False + + 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 @@ -51,6 +51,23 @@ extern GtkWidget *searchwin; 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")), ""); @@ -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 -- cgit v1.2.3