1
/* vim: set expandtab ts=8 sw=4: */
2
/* $Id: showdesktop.c 24221 2006-12-30 14:08:01Z jasper $
4
* Copyright © 2005 Jasper Huijsmans <jasper@xfce.org>
5
* Copyright © 2006 Jani Monoses <jani@ubuntu.com>
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* (at your option) any later version.
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU Library General Public License for more details.
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27
#include <libxfcegui4/libxfcegui4.h>
28
#include <libxfce4panel/xfce-panel-plugin.h>
29
#include <libxfce4panel/xfce-panel-convenience.h>
31
#define SHOW_DESKTOP_ICON_NAME "gnome-fs-desktop"
32
#define TIP_ACTIVE _("Restore hidden windows")
33
#define TIP_INACTIVE _("Hide windows and show desktop")
37
XfcePanelPlugin *plugin;
42
GtkTooltips *tooltips;
53
/* Panel Plugin Interface */
55
static void showdesktop_construct (XfcePanelPlugin * plugin);
57
XFCE_PANEL_PLUGIN_REGISTER_INTERNAL (showdesktop_construct);
60
/* internal functions */
63
showdesktop_set_size (XfcePanelPlugin *plugin, int size, ShowDesktopData *sdd)
66
int width = size - 2 - 2 * MAX (sdd->button->style->xthickness,
67
sdd->button->style->ythickness);
69
pb = xfce_themed_icon_load (SHOW_DESKTOP_ICON_NAME, width);
72
gtk_image_set_from_pixbuf (GTK_IMAGE (sdd->image), pb);
75
gtk_widget_set_size_request (GTK_WIDGET (plugin), size, size);
81
showdesktop_free_data (XfcePanelPlugin * plugin, ShowDesktopData * sdd)
84
g_signal_handler_disconnect (sdd->screen, sdd->netk_id);
87
g_signal_handler_disconnect (plugin, sdd->screen_id);
90
g_signal_handler_disconnect (plugin, sdd->style_id);
92
sdd->netk_id = sdd->screen_id = sdd->style_id = 0;
93
gtk_object_sink (GTK_OBJECT (sdd->tooltips));
94
panel_slice_free (ShowDesktopData, sdd);
98
update_button_display (ShowDesktopData * sdd)
100
gtk_tooltips_set_tip (sdd->tooltips, sdd->button,
101
sdd->showing ? TIP_ACTIVE : TIP_INACTIVE, NULL);
105
update_button (ShowDesktopData * sdd)
110
sdd->updating = TRUE;
112
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sdd->button),
114
update_button_display (sdd);
116
sdd->updating = FALSE;
119
/* create widgets and connect to signals */
121
button_toggled (GtkWidget * button, ShowDesktopData * sdd)
128
active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
130
netk_screen_toggle_showing_desktop (sdd->screen, active);
132
sdd->showing = active;
133
update_button_display (sdd);
137
showing_desktop_changed (NetkScreen * screen, ShowDesktopData * sdd)
139
sdd->showing = netk_screen_get_showing_desktop (screen);
144
showdesktop_screen_changed (XfcePanelPlugin *plugin, GdkScreen *screen,
145
ShowDesktopData *sdd)
149
g_signal_handler_disconnect (sdd->screen, sdd->netk_id);
153
screen = gtk_widget_get_screen (GTK_WIDGET (plugin));
156
sdd->screen = netk_screen_get (gdk_screen_get_number (screen));
159
g_signal_connect (sdd->screen, "showing_desktop_changed",
160
G_CALLBACK (showing_desktop_changed), sdd);
162
sdd->showing = netk_screen_get_showing_desktop (sdd->screen);
164
showdesktop_set_size (plugin, xfce_panel_plugin_get_size (plugin), sdd);
169
showdesktop_style_set (XfcePanelPlugin *plugin, gpointer ignored,
170
ShowDesktopData *sdd)
172
showdesktop_set_size (plugin, xfce_panel_plugin_get_size (plugin), sdd);
176
showdesktop_construct (XfcePanelPlugin * plugin)
178
ShowDesktopData *sdd = panel_slice_new0 (ShowDesktopData);
180
sdd->plugin = plugin;
182
sdd->tooltips = gtk_tooltips_new ();
184
sdd->image = gtk_image_new ();
186
sdd->button = xfce_create_panel_toggle_button ();
187
gtk_container_add (GTK_CONTAINER (sdd->button), GTK_WIDGET (sdd->image));
189
gtk_button_set_relief (GTK_BUTTON (sdd->button), GTK_RELIEF_NONE);
190
gtk_widget_show_all (sdd->button);
192
gtk_container_add (GTK_CONTAINER (plugin), sdd->button);
193
xfce_panel_plugin_add_action_widget (plugin, sdd->button);
195
g_signal_connect (sdd->button, "toggled",
196
G_CALLBACK (button_toggled), sdd);
198
g_signal_connect (plugin, "free-data",
199
G_CALLBACK (showdesktop_free_data), sdd);
201
g_signal_connect (plugin, "size-changed",
202
G_CALLBACK (showdesktop_set_size), sdd);
206
showdesktop_screen_changed (plugin, gtk_widget_get_screen (sdd->button),
210
g_signal_connect (plugin, "screen-changed",
211
G_CALLBACK (showdesktop_screen_changed), sdd);
214
g_signal_connect (plugin, "style-set",
215
G_CALLBACK (showdesktop_style_set), sdd);