# $Id: xfce4-panel-siginfo.diff,v 1.3 2005/10/07 02:26:25 jcs Exp $ # # make xfce4-panel respond to SIGINFO when in auto-hide mode, making it pop # out for two seconds and hide again, as if it was moused over; useful for # binding a key in a window manager that executes 'pkill -INFO xfce4-panel' to # show the panel without using the mouse # # against xfce4-panel-4.2.2 # # by joshua stein # --- xfce4-panel-4.2.2/panel/panel.h.orig Sun May 15 03:18:57 2005 +++ xfce4-panel-4.2.2/panel/panel.h Wed May 25 10:22:15 2005 @@ -89,5 +89,8 @@ G_MODULE_IMPORT int panel_get_side (void); +G_MODULE_EXPORT void panel_set_hidden (Panel * p, gboolean hide); + +G_MODULE_EXPORT gboolean panel_hide_timeout (Panel * p); #endif /* __XFCE_PANEL_H */ --- xfce4-panel-4.2.2/panel/panel.c.orig Sun May 15 03:18:57 2005 +++ xfce4-panel-4.2.2/panel/panel.c Wed May 25 10:24:15 2005 @@ -115,8 +115,6 @@ static void panel_set_position (Panel * p); -static void panel_set_hidden (Panel * p, gboolean hide); - static void init_settings (Panel * p); @@ -822,7 +820,7 @@ */ extern PanelPopup *open_popup; -static void +void panel_set_hidden (Panel * p, gboolean hide) { int x, y, w, h; @@ -890,7 +888,7 @@ g_signal_handler_unblock (p->toplevel, p->priv->allocate_id); } -static gboolean +gboolean panel_hide_timeout (Panel * p) { /* if popup is open, keep trying */ --- xfce4-panel-4.2.2/panel/main.c.orig Sun May 15 03:18:57 2005 +++ xfce4-panel-4.2.2/panel/main.c Wed May 25 10:43:57 2005 @@ -56,6 +56,7 @@ #include "controls_dialog.h" #include "item_dialog.h" #include "popup.h" +#include "panel.h" #define XFCE_PANEL_SELECTION_FMT "XFCE_PANEL_SELECTION_%u" @@ -70,6 +71,7 @@ RESTART, QUIT, QUIT_CONFIRM, + SHOW_PANEL, NUM_SIGNALS, } SignalState; @@ -164,7 +166,10 @@ check_signal_state (void) { static gboolean restarting = FALSE; + Panel *p; + p = &panel; + if (sigstate != NOSIGNAL) { /* close open dialogs */ @@ -186,6 +191,23 @@ sigstate = NOSIGNAL; quit (FALSE); } + else if (sigstate == SHOW_PANEL) + { + sigstate = NOSIGNAL; + if (settings.autohide) + { + if (p->hide_timeout) + { + g_source_remove (p->hide_timeout); + p->hide_timeout = 0; + } + + panel_set_hidden (p, FALSE); + + p->hide_timeout = g_timeout_add (2000, + (GSourceFunc) panel_hide_timeout, p); + } + } } /* keep running */ @@ -210,6 +232,10 @@ sigstate = QUIT_CONFIRM; break; + case SIGINFO: + sigstate = SHOW_PANEL; + break; + case SIGINT: /* hack: prevent the panel from saving config on ^C */ disable_user_config = TRUE; @@ -438,12 +464,14 @@ sigaction (SIGUSR2, &act, NULL); sigaction (SIGINT, &act, NULL); sigaction (SIGTERM, &act, NULL); + sigaction (SIGINFO, &act, NULL); #else signal (SIGHUP, sighandler); signal (SIGUSR1, sighandler); signal (SIGUSR2, sighandler); signal (SIGINT, sighandler); signal (SIGTERM, sighandler); + signal (SIGINFO, sighandler); #endif /* hack to prevent arrow buttons from being cropped */