diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2009-12-28 20:37:03 +0100 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2009-12-28 20:37:03 +0100 |
commit | 04a379e7ea25c8d177dae83753cba6bba886b8d0 (patch) | |
tree | 32c383c73de35a9b7e422dbc6442428bada1cc9b | |
parent | b2ce4f7aa48f17cc6587cf18cdd9d2a44fd5cfeb (diff) |
remember/restore search window geometry
-rw-r--r-- | plugins/gtkui/callbacks.c | 12 | ||||
-rw-r--r-- | plugins/gtkui/callbacks.h | 10 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 2 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 6 | ||||
-rw-r--r-- | plugins/gtkui/search.c | 72 | ||||
-rw-r--r-- | plugins/gtkui/search.h | 3 |
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 |