summaryrefslogtreecommitdiff
path: root/applets/brightness
diff options
context:
space:
mode:
Diffstat (limited to 'applets/brightness')
-rw-r--r--applets/brightness/Makefile.am12
-rw-r--r--applets/brightness/brightness-applet.c80
-rw-r--r--applets/brightness/meson.build34
3 files changed, 104 insertions, 22 deletions
diff --git a/applets/brightness/Makefile.am b/applets/brightness/Makefile.am
index 049a6c4..8b8ea73 100644
--- a/applets/brightness/Makefile.am
+++ b/applets/brightness/Makefile.am
@@ -1,5 +1,10 @@
NULL =
+if HAVE_WAYLAND
+WAYLAND_CPPFLAGS = $(GTK_LAYER_SHELL_CFLAGS)
+WAYLAND_LIBS = $(GTK_LAYER_SHELL_LIBS)
+endif
+
AM_CPPFLAGS = \
-I. -I$(srcdir) \
$(GLIB_CFLAGS) \
@@ -7,6 +12,7 @@ AM_CPPFLAGS = \
$(CAIRO_CFLAGS) \
$(PANEL_CFLAGS) \
$(LIBNOTIFY_CFLAGS) \
+ $(WAYLAND_CPPFLAGS) \
-DBINDIR=\"$(bindir)\" \
-DMATELOCALEDIR=\""$(datadir)/locale"\" \
-DDATADIR=\"$(datadir)\" \
@@ -38,7 +44,8 @@ libmate_brightness_applet_la_LDFLAGS = -module -avoid-version
libmate_brightness_applet_la_LIBADD = \
$(DBUS_LIBS) \
$(CAIRO_LIBS) \
- $(PANEL_LIBS)
+ $(PANEL_LIBS) \
+ $(WAYLAND_LIBS)
else
APPLET_IN_PROCESS = false
APPLET_LOCATION = $(libexecdir)/mate-brightness-applet
@@ -52,7 +59,8 @@ mate_brightness_applet_CFLAGS = $(AM_CFLAGS)
mate_brightness_applet_LDADD = \
$(DBUS_LIBS) \
$(CAIRO_LIBS) \
- $(PANEL_LIBS)
+ $(PANEL_LIBS) \
+ $(WAYLAND_LIBS)
endif
appletdir = $(datadir)/mate-panel/applets
diff --git a/applets/brightness/brightness-applet.c b/applets/brightness/brightness-applet.c
index 70ca05b..224930b 100644
--- a/applets/brightness/brightness-applet.c
+++ b/applets/brightness/brightness-applet.c
@@ -38,6 +38,11 @@
#include "gpm-common.h"
+#ifdef HAVE_WAYLAND
+#include <gdk/gdkwayland.h>
+#include <gtk-layer-shell/gtk-layer-shell.h>
+#endif /* HAVE_WAYLAND */
+
#define GPM_TYPE_BRIGHTNESS_APPLET (gpm_brightness_applet_get_type ())
#define GPM_BRIGHTNESS_APPLET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GPM_TYPE_BRIGHTNESS_APPLET, GpmBrightnessApplet))
#define GPM_BRIGHTNESS_APPLET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GPM_TYPE_BRIGHTNESS_APPLET, GpmBrightnessAppletClass))
@@ -723,14 +728,85 @@ gpm_applet_popup_cb (GpmBrightnessApplet *applet, GdkEventButton *event)
/* update UI for current brightness */
gpm_applet_update_popup_level (applet);
+ /*Get the applet location, we need that now in wayland and later in x11*/
+ gdk_window_get_origin (gtk_widget_get_window (GTK_WIDGET(applet)), &x, &y);
+
+#ifdef HAVE_WAYLAND
+
+
+ if (1 == 1)
+ {
+ gboolean top, bottom, left, right;
+ GtkWidget *toplevel;
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (applet));
+
+ if (!(GTK_IS_WIDGET(toplevel)))
+ g_message("invalid toplevel widget");
+
+ if (!gtk_layer_is_layer_window (GTK_WINDOW (applet->popup)))
+ {
+ gtk_layer_init_for_window (GTK_WINDOW (applet->popup));
+ gtk_layer_set_layer (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_LAYER_TOP);
+ gtk_layer_set_keyboard_mode (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_KEYBOARD_MODE_ON_DEMAND);
+ }
+
+ top = gtk_layer_get_anchor (GTK_WINDOW (toplevel), GTK_LAYER_SHELL_EDGE_TOP);
+ bottom = gtk_layer_get_anchor (GTK_WINDOW (toplevel), GTK_LAYER_SHELL_EDGE_BOTTOM);
+ left = gtk_layer_get_anchor (GTK_WINDOW (toplevel), GTK_LAYER_SHELL_EDGE_LEFT);
+ right = gtk_layer_get_anchor (GTK_WINDOW (toplevel), GTK_LAYER_SHELL_EDGE_RIGHT);
+
+ /*Set anchors to the edges (will hold to panel edge) and position along the panel
+ *Unset margins and anchors from any other position so as to avoid rendering issues
+ *when orientation changes as when the panel is moved
+ */
+
+ if (top && left && right)
+ {
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_TOP, TRUE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_LEFT, TRUE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_BOTTOM, FALSE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_RIGHT, FALSE);
+ gtk_layer_set_margin (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_LEFT, x);
+ gtk_layer_set_margin (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_TOP, 0);
+ }
+ if (bottom && left && right)
+ {
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_BOTTOM, TRUE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_LEFT, TRUE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_TOP, FALSE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_RIGHT, FALSE);
+ gtk_layer_set_margin (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_LEFT, x);
+ gtk_layer_set_margin (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_TOP, 0);
+ }
+ if (left && bottom && top && !right)
+ {
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_LEFT, TRUE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_TOP, TRUE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_RIGHT, FALSE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_BOTTOM, FALSE);
+ gtk_layer_set_margin (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_TOP, y);
+ gtk_layer_set_margin (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_LEFT, 0);
+ }
+ if (right && bottom && top && !left)
+ {
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_RIGHT, TRUE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_TOP, TRUE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_LEFT, FALSE);
+ gtk_layer_set_anchor (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_BOTTOM, FALSE);
+ gtk_layer_set_margin (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_TOP, y);
+ gtk_layer_set_margin (GTK_WINDOW (applet->popup), GTK_LAYER_SHELL_EDGE_LEFT, 0);
+ }
+ }
+
+#endif /* HAVE_WAYLAND */
+
gtk_widget_show_all (applet->popup);
/* retrieve geometry parameters and move window appropriately */
orientation = mate_panel_applet_get_orient (MATE_PANEL_APPLET (MATE_PANEL_APPLET (applet)));
- gdk_window_get_origin (gtk_widget_get_window (GTK_WIDGET(applet)), &x, &y);
-
gtk_widget_get_allocation (GTK_WIDGET (applet), &allocation);
gtk_widget_get_allocation (GTK_WIDGET (applet->popup), &popup_allocation);
+
switch (orientation) {
case MATE_PANEL_APPLET_ORIENT_DOWN:
x += allocation.x + allocation.width/2;
diff --git a/applets/brightness/meson.build b/applets/brightness/meson.build
index 896eef2..c308d95 100644
--- a/applets/brightness/meson.build
+++ b/applets/brightness/meson.build
@@ -15,18 +15,24 @@ cflags = [
'-DEGG_CONSOLE="GPM_CONSOLE"'
]
+applet_deps = [
+ gtk,
+ glib,
+ cairo,
+ notify,
+ dbus,
+ dbusglib,
+ matepanel
+]
+
+if enable_wayland
+ applet_deps += gtk_layer_shell
+endif
+
if enable_applets_inprocess
shared_library('mate-brightness-applet',
sources: source_files,
- dependencies : [
- gtk,
- glib,
- cairo,
- notify,
- dbus,
- dbusglib,
- matepanel
- ],
+ dependencies : applet_deps,
include_directories : config_inc,
c_args : cflags,
install : true,
@@ -35,15 +41,7 @@ if enable_applets_inprocess
else
executable('mate-brightness-applet',
sources: source_files,
- dependencies : [
- gtk,
- glib,
- cairo,
- notify,
- dbus,
- dbusglib,
- matepanel
- ],
+ dependencies : applet_deps,
include_directories : config_inc,
c_args : cflags,
install : true,