diff options
Diffstat (limited to 'applets/brightness')
| -rw-r--r-- | applets/brightness/Makefile.am | 12 | ||||
| -rw-r--r-- | applets/brightness/brightness-applet.c | 80 | ||||
| -rw-r--r-- | applets/brightness/meson.build | 34 |
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, |
