From 64c6bd150a5e8f6c79175034ef90b6706c7e569b Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Sun, 30 Sep 2012 16:11:48 -0400 Subject: [PATCH] skins: Call "window close" hook to check whether we need to quit or not. Closes: #178. --- src/skins/plugin.c | 12 ++++++++++++ src/skins/plugin.h | 6 ++++-- src/skins/ui_equalizer.c | 16 ++++------------ src/skins/ui_main.c | 17 +++++------------ src/skins/ui_playlist.c | 36 +++++++++++------------------------- 5 files changed, 36 insertions(+), 51 deletions(-) diff --git a/src/skins/plugin.c b/src/skins/plugin.c index d3fd054d67..28ec54b36f 100644 --- a/src/skins/plugin.c +++ b/src/skins/plugin.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -177,3 +178,14 @@ static void show_error_message (const gchar * text) { audgui_simple_message (& error_win, GTK_MESSAGE_ERROR, _("Error"), _(text)); } + +bool_t handle_window_close (void) +{ + bool_t handled = FALSE; + hook_call ("window close", & handled); + + if (! handled) + aud_drct_quit (); + + return TRUE; +} diff --git a/src/skins/plugin.h b/src/skins/plugin.h index 990a69fc20..58c7cc06e0 100644 --- a/src/skins/plugin.h +++ b/src/skins/plugin.h @@ -21,7 +21,7 @@ #ifndef PLUGIN_SKINS_H #define PLUGIN_SKINS_H -#include +#include enum { SKINS_PATH_USER_SKIN_DIR, @@ -29,6 +29,8 @@ enum { SKINS_PATH_COUNT }; -extern gchar *skins_paths[]; +extern char * skins_paths[]; + +bool_t handle_window_close (void); #endif diff --git a/src/skins/ui_equalizer.c b/src/skins/ui_equalizer.c index 83ac9b169e..f6502a24b2 100644 --- a/src/skins/ui_equalizer.c +++ b/src/skins/ui_equalizer.c @@ -35,6 +35,7 @@ #include "actions-equalizer.h" #include "config.h" +#include "plugin.h" #include "skins_cfg.h" #include "ui_equalizer.h" #include "ui_main.h" @@ -204,12 +205,6 @@ equalizerwin_close_cb(void) equalizerwin_show(FALSE); } -static gboolean equalizerwin_delete(GtkWidget *widget, void *data) -{ - aud_drct_quit (); - return TRUE; -} - static void eqwin_volume_set_knob (void) { gint pos = hslider_get_pos (equalizerwin_volume); @@ -386,12 +381,9 @@ equalizerwin_create_window(void) gtk_widget_set_app_paintable(equalizerwin, TRUE); - g_signal_connect(equalizerwin, "delete_event", - G_CALLBACK(equalizerwin_delete), NULL); - g_signal_connect(equalizerwin, "button_press_event", - G_CALLBACK(equalizerwin_press), NULL); - g_signal_connect ((GObject *) equalizerwin, "key-press-event", (GCallback) - mainwin_keypress, 0); + g_signal_connect (equalizerwin, "delete-event", (GCallback) handle_window_close, NULL); + g_signal_connect (equalizerwin, "button-press-event", (GCallback) equalizerwin_press, NULL); + g_signal_connect (equalizerwin, "key-press-event", (GCallback) mainwin_keypress, NULL); } static void equalizerwin_destroyed (void) diff --git a/src/skins/ui_main.c b/src/skins/ui_main.c index 40199285d8..9354b4ad1a 100644 --- a/src/skins/ui_main.c +++ b/src/skins/ui_main.c @@ -42,6 +42,7 @@ #include "actions-playlist.h" #include "config.h" #include "dnd.h" +#include "plugin.h" #include "skins_cfg.h" #include "ui_equalizer.h" #include "ui_hints.h" @@ -1245,7 +1246,7 @@ mainwin_create_widgets(void) mainwin_close = button_new (9, 9, 18, 0, 18, 9, SKIN_TITLEBAR, SKIN_TITLEBAR); window_put_widget (mainwin, FALSE, mainwin_close, 264, 3); - button_on_release (mainwin_close, (ButtonCB) aud_drct_quit); + button_on_release (mainwin_close, (ButtonCB) handle_window_close); mainwin_rew = button_new (23, 18, 0, 0, 0, 18, SKIN_CBUTTONS, SKIN_CBUTTONS); window_put_widget (mainwin, FALSE, mainwin_rew, 16, 88); @@ -1377,7 +1378,7 @@ mainwin_create_widgets(void) mainwin_shaded_close = button_new (9, 9, 18, 0, 18, 9, SKIN_TITLEBAR, SKIN_TITLEBAR); window_put_widget (mainwin, TRUE, mainwin_shaded_close, 264, 3); - button_on_release (mainwin_shaded_close, (ButtonCB) aud_drct_quit); + button_on_release (mainwin_shaded_close, (ButtonCB) handle_window_close); mainwin_srew = button_new_small (8, 7); window_put_widget (mainwin, TRUE, mainwin_srew, 169, 4); @@ -1474,12 +1475,6 @@ static gboolean state_cb (GtkWidget * widget, GdkEventWindowState * event, return TRUE; } -static gboolean delete_cb (GtkWidget * widget, GdkEvent * event, void * unused) -{ - aud_drct_quit (); - return TRUE; -} - static void mainwin_draw (GtkWidget * window, cairo_t * cr) { gint width = config.player_shaded ? MAINWIN_SHADED_WIDTH : active_skin->properties.mainwin_width; @@ -1514,10 +1509,8 @@ mainwin_create_window(void) ui_main_evlistener_init(); - g_signal_connect ((GObject *) mainwin, "window-state-event", (GCallback) - state_cb, NULL); - g_signal_connect ((GObject *) mainwin, "delete-event", (GCallback) - delete_cb, NULL); + g_signal_connect ((GObject *) mainwin, "window-state-event", (GCallback) state_cb, NULL); + g_signal_connect ((GObject *) mainwin, "delete-event", (GCallback) handle_window_close, NULL); } void mainwin_unhook (void) diff --git a/src/skins/ui_playlist.c b/src/skins/ui_playlist.c index d78bb34fe0..d99c7ff9c6 100644 --- a/src/skins/ui_playlist.c +++ b/src/skins/ui_playlist.c @@ -41,6 +41,7 @@ #include "config.h" #include "dnd.h" #include "drag-handle.h" +#include "plugin.h" #include "skins_cfg.h" #include "ui_main.h" #include "ui_manager.h" @@ -510,12 +511,6 @@ playlistwin_press(GtkWidget * widget, return TRUE; } -static gboolean playlistwin_delete(GtkWidget *widget, void *data) -{ - aud_drct_quit (); - return TRUE; -} - void playlistwin_hide_timer(void) { @@ -761,27 +756,18 @@ playlistwin_create_window(void) GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_SCROLL_MASK | GDK_VISIBILITY_NOTIFY_MASK); - g_signal_connect(playlistwin, "delete_event", - G_CALLBACK(playlistwin_delete), NULL); - g_signal_connect(playlistwin, "button_press_event", - G_CALLBACK(playlistwin_press), NULL); - g_signal_connect(playlistwin, "scroll_event", - G_CALLBACK(playlistwin_scrolled), NULL); - - drag_dest_set(playlistwin); + g_signal_connect (playlistwin, "delete-event", (GCallback) handle_window_close, NULL); + g_signal_connect (playlistwin, "button-press-event", (GCallback) playlistwin_press, NULL); + g_signal_connect (playlistwin, "scroll-event", (GCallback) playlistwin_scrolled, NULL); + g_signal_connect (playlistwin, "key-press-event", (GCallback) mainwin_keypress, NULL); + drag_dest_set (playlistwin); drop_position = -1; - g_signal_connect ((GObject *) playlistwin, "drag-motion", (GCallback) - drag_motion, 0); - g_signal_connect ((GObject *) playlistwin, "drag-leave", (GCallback) - drag_leave, 0); - g_signal_connect ((GObject *) playlistwin, "drag-drop", (GCallback) - drag_drop, 0); - g_signal_connect ((GObject *) playlistwin, "drag-data-received", (GCallback) - drag_data_received, 0); - - g_signal_connect ((GObject *) playlistwin, "key-press-event", (GCallback) - mainwin_keypress, 0); + + g_signal_connect (playlistwin, "drag-motion", (GCallback) drag_motion, NULL); + g_signal_connect (playlistwin, "drag-leave", (GCallback) drag_leave, NULL); + g_signal_connect (playlistwin, "drag-drop", (GCallback) drag_drop, NULL); + g_signal_connect (playlistwin, "drag-data-received", (GCallback) drag_data_received, NULL); } static void get_title (void)