summaryrefslogtreecommitdiff
path: root/libdecor/src
diff options
context:
space:
mode:
Diffstat (limited to 'libdecor/src')
-rw-r--r--libdecor/src/cursor-settings.c43
-rw-r--r--libdecor/src/plugins/cairo/libdecor-cairo.c8
-rw-r--r--libdecor/src/plugins/gtk/libdecor-gtk.c29
3 files changed, 41 insertions, 39 deletions
diff --git a/libdecor/src/cursor-settings.c b/libdecor/src/cursor-settings.c
index e7082e25e..75c42d194 100644
--- a/libdecor/src/cursor-settings.c
+++ b/libdecor/src/cursor-settings.c
@@ -29,6 +29,23 @@
#include <stdbool.h>
#include "config.h"
+static bool
+get_cursor_settings_from_env(char **theme, int *size)
+{
+ char *env_xtheme;
+ char *env_xsize;
+
+ env_xtheme = getenv("XCURSOR_THEME");
+ if (env_xtheme != NULL)
+ *theme = strdup(env_xtheme);
+
+ env_xsize = getenv("XCURSOR_SIZE");
+ if (env_xsize != NULL)
+ *size = atoi(env_xsize);
+
+ return env_xtheme != NULL && env_xsize != NULL;
+}
+
#ifdef HAS_DBUS
#include <dbus/dbus.h>
@@ -116,15 +133,15 @@ libdecor_get_cursor_settings(char **theme, int *size)
connection = dbus_bus_get(DBUS_BUS_SESSION, &error);
if (dbus_error_is_set(&error))
- return false;
+ goto fallback;
reply = get_setting_sync(connection, name, key_theme);
if (!reply)
- return false;
+ goto fallback;
if (!parse_type(reply, DBUS_TYPE_STRING, &value_theme)) {
dbus_message_unref(reply);
- return false;
+ goto fallback;
}
*theme = strdup(value_theme);
@@ -133,32 +150,24 @@ libdecor_get_cursor_settings(char **theme, int *size)
reply = get_setting_sync(connection, name, key_size);
if (!reply)
- return false;
+ goto fallback;
if (!parse_type(reply, DBUS_TYPE_INT32, size)) {
dbus_message_unref(reply);
- return false;
+ goto fallback;
}
dbus_message_unref(reply);
return true;
+
+fallback:
+ return get_cursor_settings_from_env(theme, size);
}
#else
bool
libdecor_get_cursor_settings(char **theme, int *size)
{
- char *env_xtheme;
- char *env_xsize;
-
- env_xtheme = getenv("XCURSOR_THEME");
- if (env_xtheme != NULL)
- *theme = strdup(env_xtheme);
-
- env_xsize = getenv("XCURSOR_SIZE");
- if (env_xsize != NULL)
- *size = atoi(env_xsize);
-
- return env_xtheme != NULL && env_xsize != NULL;
+ return get_cursor_settings_from_env(theme, size);
}
#endif
diff --git a/libdecor/src/plugins/cairo/libdecor-cairo.c b/libdecor/src/plugins/cairo/libdecor-cairo.c
index f8beb7aa1..765800df6 100644
--- a/libdecor/src/plugins/cairo/libdecor-cairo.c
+++ b/libdecor/src/plugins/cairo/libdecor-cairo.c
@@ -2074,10 +2074,10 @@ component_edge(const struct border_component *cmpnt,
const int pointer_y,
const int margin)
{
- const bool top = pointer_y < margin;
- const bool bottom = pointer_y > (cmpnt->server.buffer->height - margin);
- const bool left = pointer_x < margin;
- const bool right = pointer_x > (cmpnt->server.buffer->width - margin);
+ const bool top = pointer_y < margin * 2;
+ const bool bottom = pointer_y > (cmpnt->server.buffer->height - margin * 2);
+ const bool left = pointer_x < margin * 2;
+ const bool right = pointer_x > (cmpnt->server.buffer->width - margin * 2);
if (top)
if (left)
diff --git a/libdecor/src/plugins/gtk/libdecor-gtk.c b/libdecor/src/plugins/gtk/libdecor-gtk.c
index 9a9bc5e26..ef638f1a9 100644
--- a/libdecor/src/plugins/gtk/libdecor-gtk.c
+++ b/libdecor/src/plugins/gtk/libdecor-gtk.c
@@ -421,6 +421,7 @@ libdecor_plugin_gtk_destroy(struct libdecor_plugin *plugin)
free(cursor_output);
}
+ free(seat->name);
free(seat);
}
@@ -449,7 +450,7 @@ libdecor_plugin_gtk_destroy(struct libdecor_plugin *plugin)
if (plugin_gtk->wl_subcompositor)
wl_subcompositor_destroy(plugin_gtk->wl_subcompositor);
-
+ libdecor_plugin_release(&plugin_gtk->plugin);
free(plugin_gtk);
}
@@ -673,24 +674,16 @@ libdecor_plugin_gtk_frame_free(struct libdecor_plugin *plugin,
struct libdecor_frame_gtk *frame_gtk =
(struct libdecor_frame_gtk *) frame;
- /* when in SSD mode, frame_gtk->header is not a proper GTK widget */
- if (!GTK_IS_WIDGET(frame_gtk->header)) return;
- gtk_widget_destroy(frame_gtk->header);
- frame_gtk->header = NULL;
- if (!GTK_IS_WIDGET(frame_gtk->window)) return;
- gtk_widget_destroy(frame_gtk->window);
- frame_gtk->window = NULL;
+ g_clear_pointer (&frame_gtk->header, gtk_widget_destroy);
+ g_clear_pointer (&frame_gtk->window, gtk_widget_destroy);
free_border_component(&frame_gtk->headerbar);
free_border_component(&frame_gtk->shadow);
frame_gtk->shadow_showing = false;
- if (frame_gtk->shadow_blur != NULL) {
- cairo_surface_destroy(frame_gtk->shadow_blur);
- frame_gtk->shadow_blur = NULL;
- }
- free(frame_gtk->title);
- frame_gtk->title = NULL;
+ g_clear_pointer (&frame_gtk->shadow_blur, cairo_surface_destroy);
+
+ g_clear_pointer (&frame_gtk->title, free);
frame_gtk->decoration_type = DECORATION_TYPE_NONE;
@@ -1966,10 +1959,10 @@ component_edge(const struct border_component *cmpnt,
const int pointer_y,
const int margin)
{
- const bool top = pointer_y < margin;
- const bool bottom = pointer_y > (cmpnt->buffer->height - margin);
- const bool left = pointer_x < margin;
- const bool right = pointer_x > (cmpnt->buffer->width - margin);
+ const bool top = pointer_y < margin * 2;
+ const bool bottom = pointer_y > (cmpnt->buffer->height - margin * 2);
+ const bool left = pointer_x < margin * 2;
+ const bool right = pointer_x > (cmpnt->buffer->width - margin * 2);
if (top) {
if (left)