summaryrefslogtreecommitdiff
path: root/applets/wncklet/showdesktop.c
diff options
context:
space:
mode:
Diffstat (limited to 'applets/wncklet/showdesktop.c')
-rw-r--r--applets/wncklet/showdesktop.c111
1 files changed, 79 insertions, 32 deletions
diff --git a/applets/wncklet/showdesktop.c b/applets/wncklet/showdesktop.c
index 7999174a..190077f1 100644
--- a/applets/wncklet/showdesktop.c
+++ b/applets/wncklet/showdesktop.c
@@ -22,20 +22,18 @@
*/
#ifdef HAVE_CONFIG_H
- #include <config.h>
-#endif
-
-#ifndef HAVE_X11
-#error file should only be built when HAVE_X11 is enabled
+#include <config.h>
#endif
#include <glib/gi18n.h>
#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
+#ifdef HAVE_X11
+#include <gdk/gdkx.h>
#define WNCK_I_KNOW_THIS_IS_UNSTABLE
#include <libwnck/libwnck.h>
+#endif
#include "wncklet.h"
#include "showdesktop.h"
@@ -45,7 +43,6 @@
#define TIMEOUT_ACTIVATE_SECONDS 1
#define SHOW_DESKTOP_ICON "user-desktop"
-
typedef struct {
/* widgets */
GtkWidget* applet;
@@ -318,7 +315,7 @@ static gboolean do_not_eat_button_press(GtkWidget* widget, GdkEventButton* event
{
if (event->button != 1)
{
- g_signal_stop_emission_by_name(widget, "button_press_event");
+ g_signal_stop_emission_by_name(widget, "button-press-event");
}
return FALSE;
@@ -361,21 +358,32 @@ static void show_desktop_applet_realized(MatePanelApplet* applet, gpointer data)
sdd = (ShowDesktopData*) data;
- if (sdd->wnck_screen != NULL)
- g_signal_handlers_disconnect_by_func(sdd->wnck_screen, show_desktop_changed_callback, sdd);
-
if (sdd->icon_theme != NULL)
g_signal_handlers_disconnect_by_func(sdd->icon_theme, theme_changed_callback, sdd);
screen = gtk_widget_get_screen(sdd->applet);
- sdd->wnck_screen = wnck_screen_get(gdk_x11_screen_get_screen_number (screen));
if (sdd->wnck_screen != NULL)
- wncklet_connect_while_alive(sdd->wnck_screen, "showing_desktop_changed", G_CALLBACK(show_desktop_changed_callback), sdd, sdd->applet);
- else
- g_warning("Could not get WnckScreen!");
+ g_signal_handlers_disconnect_by_func(sdd->wnck_screen, show_desktop_changed_callback, sdd);
- show_desktop_changed_callback(sdd->wnck_screen, sdd);
+ sdd->wnck_screen = NULL;
+
+#ifdef HAVE_X11
+ if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
+ {
+ sdd->wnck_screen = wnck_screen_get (gdk_x11_screen_get_screen_number (screen));
+ if (sdd->wnck_screen != NULL)
+ wncklet_connect_while_alive (sdd->wnck_screen,
+ "showing_desktop_changed",
+ G_CALLBACK (show_desktop_changed_callback),
+ sdd,
+ sdd->applet);
+ else
+ g_warning ("Could not get WnckScreen!");
+ }
+#endif /* HAVE_X11 */
+
+ show_desktop_changed_callback (sdd->wnck_screen, sdd);
sdd->icon_theme = gtk_icon_theme_get_for_screen (screen);
wncklet_connect_while_alive(sdd->icon_theme, "changed", G_CALLBACK(theme_changed_callback), sdd, sdd->applet);
@@ -418,7 +426,9 @@ gboolean show_desktop_applet_fill(MatePanelApplet* applet)
sdd->size = mate_panel_applet_get_size(MATE_PANEL_APPLET(sdd->applet));
- g_signal_connect(G_OBJECT(sdd->applet), "realize", G_CALLBACK(show_desktop_applet_realized), sdd);
+ g_signal_connect (sdd->applet, "realize",
+ G_CALLBACK (show_desktop_applet_realized),
+ sdd);
sdd->button = gtk_toggle_button_new ();
@@ -438,23 +448,29 @@ gboolean show_desktop_applet_fill(MatePanelApplet* applet)
atk_obj = gtk_widget_get_accessible(sdd->button);
atk_object_set_name (atk_obj, _("Show Desktop Button"));
- g_signal_connect(G_OBJECT(sdd->button), "button_press_event", G_CALLBACK(do_not_eat_button_press), NULL);
+ g_signal_connect (sdd->button, "button-press-event",
+ G_CALLBACK(do_not_eat_button_press),
+ NULL);
- g_signal_connect(G_OBJECT(sdd->button), "toggled", G_CALLBACK(button_toggled_callback), sdd);
+ g_signal_connect (sdd->button, "toggled",
+ G_CALLBACK (button_toggled_callback),
+ sdd);
gtk_container_set_border_width(GTK_CONTAINER(sdd->button), 0);
gtk_container_add(GTK_CONTAINER(sdd->button), sdd->image);
gtk_container_add(GTK_CONTAINER(sdd->applet), sdd->button);
- g_signal_connect (G_OBJECT(sdd->button), "size_allocate", G_CALLBACK(button_size_allocated), sdd);
+ g_signal_connect (sdd->button, "size-allocate",
+ G_CALLBACK (button_size_allocated),
+ sdd);
/* FIXME: Update this comment. */
/* we have to bind change_orient before we do applet_widget_add
since we need to get an initial change_orient signal to set our
initial oriantation, and we get that during the _add call */
- g_signal_connect(G_OBJECT (sdd->applet), "change_orient", G_CALLBACK (applet_change_orient), sdd);
-
- mate_panel_applet_set_background_widget(MATE_PANEL_APPLET (sdd->applet), GTK_WIDGET(sdd->applet));
+ g_signal_connect (sdd->applet, "change-orient",
+ G_CALLBACK (applet_change_orient),
+ sdd);
action_group = gtk_action_group_new("ShowDesktop Applet Actions");
gtk_action_group_set_translation_domain(action_group, GETTEXT_PACKAGE);
@@ -464,12 +480,18 @@ gboolean show_desktop_applet_fill(MatePanelApplet* applet)
action_group);
g_object_unref(action_group);
- g_signal_connect(G_OBJECT(sdd->applet), "destroy", G_CALLBACK(applet_destroyed), sdd);
+ g_signal_connect (sdd->applet, "destroy",
+ G_CALLBACK (applet_destroyed),
+ sdd);
gtk_drag_dest_set(GTK_WIDGET(sdd->button), 0, NULL, 0, 0);
- g_signal_connect(G_OBJECT(sdd->button), "drag_motion", G_CALLBACK (button_drag_motion), sdd);
- g_signal_connect(G_OBJECT(sdd->button), "drag_leave", G_CALLBACK (button_drag_leave), sdd);
+ g_signal_connect (sdd->button, "drag-motion",
+ G_CALLBACK (button_drag_motion),
+ sdd);
+ g_signal_connect (sdd->button, "drag-leave",
+ G_CALLBACK (button_drag_leave),
+ sdd);
gtk_widget_show_all(sdd->applet);
@@ -502,19 +524,34 @@ static void display_about_dialog(GtkAction* action, ShowDesktopData* sdd)
"comments", _("This button lets you hide all windows and show the desktop."),
"copyright", _("Copyright \xc2\xa9 2002 Red Hat, Inc.\n"
"Copyright \xc2\xa9 2011 Perberos\n"
- "Copyright \xc2\xa9 2012-2020 MATE developers"),
+ "Copyright \xc2\xa9 2012-2021 MATE developers"),
"documenters", documenters,
"icon-name", SHOW_DESKTOP_ICON,
"logo-icon-name", SHOW_DESKTOP_ICON,
"translator-credits", _("translator-credits"),
"version", VERSION,
- "website", "http://www.mate-desktop.org/",
+ "website", PACKAGE_URL,
NULL);
}
static void button_toggled_callback(GtkWidget* button, ShowDesktopData* sdd)
{
- if (!gdk_x11_screen_supports_net_wm_hint(gtk_widget_get_screen(button), gdk_atom_intern("_NET_SHOWING_DESKTOP", FALSE)))
+ gboolean can_show_desktop;
+
+#ifdef HAVE_X11
+ if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
+ {
+ can_show_desktop = gdk_x11_screen_supports_net_wm_hint(gtk_widget_get_screen(button),
+ gdk_atom_intern("_NET_SHOWING_DESKTOP",
+ FALSE));
+ }
+ else
+#endif
+ { /* not using X11 */
+ can_show_desktop = FALSE;
+ }
+
+ if (!can_show_desktop)
{
static GtkWidget* dialog = NULL;
@@ -527,11 +564,17 @@ static void button_toggled_callback(GtkWidget* button, ShowDesktopData* sdd)
return;
}
- dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Your window manager does not support the show desktop button, or you are not running a window manager."));
+ dialog = gtk_message_dialog_new(NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Your window manager does not support the show desktop button, or you are not running a window manager."));
g_object_add_weak_pointer(G_OBJECT(dialog), (gpointer) &dialog);
- g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK(gtk_widget_destroy),
+ NULL);
gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
gtk_window_set_screen(GTK_WINDOW(dialog), gtk_widget_get_screen(button));
@@ -540,16 +583,20 @@ static void button_toggled_callback(GtkWidget* button, ShowDesktopData* sdd)
return;
}
+#ifdef HAVE_X11
if (sdd->wnck_screen != NULL)
wnck_screen_toggle_showing_desktop(sdd->wnck_screen, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
+#endif /* HAVE_X11 */
update_button_display (sdd);
}
static void show_desktop_changed_callback(WnckScreen* screen, ShowDesktopData* sdd)
{
+#ifdef HAVE_X11
if (sdd->wnck_screen != NULL)
- sdd->showing_desktop = wnck_screen_get_showing_desktop(sdd->wnck_screen);
+ sdd->showing_desktop = (wnck_screen_get_showing_desktop(sdd->wnck_screen) != FALSE);
+#endif /* HAVE_X11 */
update_button_state (sdd);
}