Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions applets/wncklet/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ AM_CFLAGS = $(WARN_CFLAGS)
WNCKLET_SOURCES = \
wncklet.c \
wncklet.h \
tasklist-backend.h \
tasklist-core.c \
window-menu.c \
window-menu.h \
window-list.c \
Expand All @@ -23,6 +25,10 @@ WNCKLET_SOURCES = \
showdesktop.h \
workspace-switcher.c \
workspace-switcher.h \
xfw-pager.c \
xfw-pager.h \
xfw-window-menu.c \
xfw-window-menu.h \
$(BUILT_SOURCES)


Expand All @@ -33,18 +39,22 @@ WNCKLET_LDADD = \
$(LIBMATE_PANEL_APPLET_LIBS)

if ENABLE_X11
WNCKLET_SOURCES += \
x11-backend.c \
x11-backend.h

WNCKLET_LDADD += \
$(X_LIBS)
$(X_LIBS) \
$(XFW_LIBS)

AM_CPPFLAGS += \
$(XFW_CFLAGS)
endif

if ENABLE_WAYLAND
WNCKLET_SOURCES += \
wayland-backend.c \
wayland-backend.h \
wayland-workspace.c \
wayland-workspace.h \
wayland-window-menu.c \
wayland-window-menu.h
wayland-backend.h

WNCKLET_LDADD += \
$(XFW_LIBS)
Expand Down
20 changes: 14 additions & 6 deletions applets/wncklet/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ wncklet_built_sources = [
wncklet_sources = [
'wncklet.c',
'wncklet.h',
'tasklist-backend.h',
'tasklist-core.c',
'window-menu.c',
'window-menu.h',
'window-list.c',
Expand All @@ -51,31 +53,37 @@ wncklet_sources = [
'showdesktop.h',
'workspace-switcher.c',
'workspace-switcher.h',
'xfw-pager.c',
'xfw-pager.h',
'xfw-window-menu.c',
'xfw-window-menu.h',
wncklet_built_sources,
]

if have_x11
wncklet_sources += [
'x11-backend.c',
'x11-backend.h',
]
endif

if have_wayland
wncklet_sources += [
'wayland-backend.c',
'wayland-backend.h',
'wayland-workspace.c',
'wayland-workspace.h',
'wayland-window-menu.c',
'wayland-window-menu.h',
]
endif

wncklet_deps = [
gtk_dep,
wnck_dep,
mate_desktop_dep,
] + libmate_panel_applet_deps

if have_x11
wncklet_deps += x11_dep
endif

if have_wayland
if have_x11 or have_wayland
wncklet_deps += [xfw_dep]
endif

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<key name="display-workspace-names" type="b">
<default>false</default>
<summary>Display workspace names</summary>
<description>If true, the workspaces in the workspace switcher will display the names of the workspaces. Otherwise they will display the windows on the workspace. This setting only works when the window manager is Marco.</description>
<description>If true, the workspaces in the workspace switcher will display the names of the workspaces. Otherwise they will display their numbers.</description>
</key>
<key name="display-all-workspaces" type="b">
<default>true</default>
Expand Down
150 changes: 21 additions & 129 deletions applets/wncklet/showdesktop.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,26 +29,13 @@

#include <gtk/gtk.h>

#ifdef HAVE_X11
#include <gdk/gdkx.h>
#define WNCK_I_KNOW_THIS_IS_UNSTABLE
#include <libwnck/libwnck.h>
#endif

#ifndef HAVE_X11
#include <gdk/gdkwayland.h>
#define GDK_IS_X11_DISPLAY(object) !(G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WAYLAND_DISPLAY))
#endif
#include <libxfce4windowing/libxfce4windowing.h>

#include "wncklet.h"
#include "showdesktop.h"

#include <string.h>

#ifdef HAVE_WAYLAND
#include <gdk/gdkwayland.h>
#include <libxfce4windowing/libxfce4windowing.h>
#endif
#define TIMEOUT_ACTIVATE_SECONDS 1
#define SHOW_DESKTOP_ICON "user-desktop"

Expand All @@ -61,13 +48,7 @@ typedef struct {
GtkOrientation orient;
int size;

#ifdef HAVE_X11
WnckHandle* wnck_handle;
#endif
WnckScreen* wnck_screen;
#ifdef HAVE_WAYLAND
XfwScreen* xfw_screen;
#endif

guint showing_desktop: 1;
guint button_activate;
Expand All @@ -86,12 +67,7 @@ static void theme_changed_callback(GtkIconTheme* icon_theme, ShowDesktopData* sd

static void button_toggled_callback(GtkWidget* button, ShowDesktopData* sdd);
static void show_desktop_state_changed (ShowDesktopData* sdd);
#ifdef HAVE_X11
static void show_desktop_changed_callback(WnckScreen* screen, ShowDesktopData* sdd);
#endif
#ifdef HAVE_WAYLAND
static void wayland_show_desktop_changed(XfwScreen* screen, GParamSpec* pspec, ShowDesktopData* sdd);
#endif
static void show_desktop_changed_callback(XfwScreen* screen, GParamSpec* pspec, ShowDesktopData* sdd);

/* this is when the panel orientation changes */

Expand Down Expand Up @@ -317,33 +293,19 @@ static void applet_destroyed(GtkWidget* applet, ShowDesktopData* sdd)
sdd->button_activate = 0;
}

#ifdef HAVE_X11
if (sdd->wnck_screen != NULL)
{
g_signal_handlers_disconnect_by_func(sdd->wnck_screen, show_desktop_changed_callback, sdd);
sdd->wnck_screen = NULL;
}
#endif

#ifdef HAVE_WAYLAND
if (sdd->xfw_screen != NULL)
{
g_signal_handlers_disconnect_by_func(sdd->xfw_screen, wayland_show_desktop_changed, sdd);
g_signal_handlers_disconnect_by_func(sdd->xfw_screen, show_desktop_changed_callback, sdd);
g_object_unref (sdd->xfw_screen);
sdd->xfw_screen = NULL;
}
#endif

if (sdd->icon_theme != NULL)
{
g_signal_handlers_disconnect_by_func(sdd->icon_theme, theme_changed_callback, sdd);
sdd->icon_theme = NULL;
}

#ifdef HAVE_X11
g_clear_object(&sdd->wnck_handle);
#endif

g_free (sdd);
}

Expand Down Expand Up @@ -399,40 +361,23 @@ static void show_desktop_applet_realized(MatePanelApplet* applet, gpointer data)

screen = gtk_widget_get_screen(sdd->applet);

if (sdd->wnck_screen != NULL)
g_signal_handlers_disconnect_by_func(sdd->wnck_screen, show_desktop_changed_callback, sdd);

sdd->wnck_screen = NULL;

#ifdef HAVE_X11
if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
if (sdd->xfw_screen != NULL)
{
sdd->wnck_screen = wncklet_get_screen (sdd->wnck_handle, sdd->applet);
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->xfw_screen, show_desktop_changed_callback, sdd);
g_object_unref (sdd->xfw_screen);
sdd->xfw_screen = NULL;
}
#endif /* HAVE_X11 */
#ifdef HAVE_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()))

sdd->xfw_screen = xfw_screen_get_default ();
if (sdd->xfw_screen != NULL)
{
XfwScreen* xfw_screen = xfw_screen_get_default ();
if (xfw_screen != NULL)
{
g_signal_connect (G_OBJECT (xfw_screen), "notify::show-desktop",
G_CALLBACK (wayland_show_desktop_changed),
sdd);
sdd->xfw_screen = xfw_screen;
}
else
g_warning ("Could not get XfwScreen!");
g_signal_connect (G_OBJECT (sdd->xfw_screen), "notify::show-desktop",
G_CALLBACK (show_desktop_changed_callback),
sdd);
}
#endif
else
g_warning ("Could not get XfwScreen!");

show_desktop_state_changed (sdd);

sdd->icon_theme = gtk_icon_theme_get_for_screen (screen);
Expand Down Expand Up @@ -476,13 +421,6 @@ gboolean show_desktop_applet_fill(MatePanelApplet* applet)

sdd->size = mate_panel_applet_get_size(MATE_PANEL_APPLET(sdd->applet));

#ifdef HAVE_X11
if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
{
sdd->wnck_handle = wnck_handle_new(WNCK_CLIENT_TYPE_PAGER);
}
#endif

g_signal_connect (sdd->applet, "realize",
G_CALLBACK (show_desktop_applet_realized),
sdd);
Expand Down Expand Up @@ -599,34 +537,10 @@ static void button_toggled_callback(GtkWidget* button, ShowDesktopData* sdd)
{
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));
}
#ifdef HAVE_WAYLAND
else if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()))
#endif
#endif
#ifdef HAVE_WAYLAND
#ifndef HAVE_X11
if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()))
#endif
{
can_show_desktop = sdd->xfw_screen != NULL;
if (can_show_desktop)
xfw_screen_set_show_desktop (sdd->xfw_screen,
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));
}
#endif

else

{ /* not using X11 or wayland */
can_show_desktop = FALSE;
}
can_show_desktop = sdd->xfw_screen != NULL;
if (can_show_desktop)
xfw_screen_set_show_desktop (sdd->xfw_screen,
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));

if (!can_show_desktop)
{
Expand Down Expand Up @@ -660,12 +574,6 @@ else
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);
}

Expand All @@ -674,29 +582,13 @@ show_desktop_state_changed (ShowDesktopData* sdd)
{
sdd->showing_desktop = FALSE;

#ifdef HAVE_X11
if (sdd->wnck_screen != NULL)
sdd->showing_desktop = (wnck_screen_get_showing_desktop(sdd->wnck_screen) != FALSE);
#endif /* HAVE_X11 */

#ifdef HAVE_WAYLAND
if (sdd->xfw_screen != NULL)
sdd->showing_desktop = xfw_screen_get_show_desktop (sdd->xfw_screen);
#endif /* HAVE_WAYLAND */

update_button_state (sdd);
}

#ifdef HAVE_X11
static void show_desktop_changed_callback(WnckScreen* screen, ShowDesktopData* sdd)
{
show_desktop_state_changed (sdd);
}
#endif /* HAVE_X11 */

#ifdef HAVE_WAYLAND
static void wayland_show_desktop_changed(XfwScreen* screen, GParamSpec* pspec, ShowDesktopData* sdd)
static void show_desktop_changed_callback(XfwScreen* screen, GParamSpec* pspec, ShowDesktopData* sdd)
{
show_desktop_state_changed (sdd);
}
#endif /* HAVE_WAYLAND */
Loading
Loading