]> git.mdlowis.com Git - proto/labwc.git/commitdiff
src/view.c: move xwayland specific function to xwayland.c
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Wed, 4 Jan 2023 03:18:00 +0000 (04:18 +0100)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Fri, 6 Jan 2023 13:54:28 +0000 (14:54 +0100)
Also remove the `<xcb/xcb_icccm.h>` include as its already included
by `"labwc.h"` -> `<wlr/xwayland.h>` -> `<wlr/xwayland/xwayland.h>`.

include/labwc.h
src/view.c
src/xwayland.c

index bb212a6ed3c0d453026e2959d06708fae6dbf979..38edf3488628d2ffaba3f7e70b4aba02177f2aa4 100644 (file)
@@ -351,6 +351,7 @@ void xdg_toplevel_decoration(struct wl_listener *listener, void *data);
 void xdg_surface_new(struct wl_listener *listener, void *data);
 
 #if HAVE_XWAYLAND
+bool xwayland_apply_size_hints(struct view *view, int *w, int *h);
 void xwayland_surface_new(struct wl_listener *listener, void *data);
 struct xwayland_unmanaged *xwayland_unmanaged_create(struct server *server,
        struct wlr_xwayland_surface *xsurface);
index 8a8fe644cb5a835c0666d2d4cdbb0bfbdc098089..34446a45be05963fb6c386a0041dd78a094782a5 100644 (file)
@@ -9,12 +9,11 @@
 #include "view.h"
 #include "workspaces.h"
 
-#if HAVE_XWAYLAND
-#include <xcb/xcb_icccm.h>
-#endif
-
-#define LAB_FALLBACK_WIDTH 640
+#define LAB_MIN_VIEW_WIDTH  100
+#define LAB_MIN_VIEW_HEIGHT  60
+#define LAB_FALLBACK_WIDTH  640
 #define LAB_FALLBACK_HEIGHT 480
+
 #define MAX(a, b) (((a) > (b)) ? (a) : (b))
 
 /**
@@ -168,49 +167,20 @@ view_move_resize(struct view *view, struct wlr_box geo)
        }
 }
 
-#define MIN_VIEW_WIDTH (100)
-#define MIN_VIEW_HEIGHT (60)
-
-#if HAVE_XWAYLAND
-static int
-round_to_increment(int val, int base, int inc)
-{
-       if (base < 0 || inc <= 0)
-               return val;
-       return base + (val - base + inc / 2) / inc * inc;
-}
-#endif
-
 void
 view_adjust_size(struct view *view, int *w, int *h)
 {
        assert(view);
-       int min_width = MIN_VIEW_WIDTH;
-       int min_height = MIN_VIEW_HEIGHT;
-#if HAVE_XWAYLAND
-       if (view->type == LAB_XWAYLAND_VIEW) {
-               xcb_size_hints_t *hints =
-                       xwayland_surface_from_view(view)->size_hints;
 
-               /*
-                * Honor size increments from WM_SIZE_HINTS. Typically, X11
-                * terminal emulators will use WM_SIZE_HINTS to make sure that
-                * the terminal is resized to a width/height evenly divisible by
-                * the cell (character) size.
-                */
-               if (hints) {
-                       *w = round_to_increment(*w, hints->base_width,
-                               hints->width_inc);
-                       *h = round_to_increment(*h, hints->base_height,
-                               hints->height_inc);
-
-                       min_width = MAX(1, hints->min_width);
-                       min_height = MAX(1, hints->min_height);
-               }
+#if HAVE_XWAYLAND
+       if (xwayland_apply_size_hints(view, w, h)) {
+               /* We don't want to cap the size to keep the aspect ratio */
+               return;
        }
 #endif
-       *w = MAX(*w, min_width);
-       *h = MAX(*h, min_height);
+
+       *w = MAX(*w, LAB_MIN_VIEW_WIDTH);
+       *h = MAX(*h, LAB_MIN_VIEW_HEIGHT);
 }
 
 void
index 1abc49063bf7026f23737e306d4f4fc5a40961d9..353f49ffbc9d10810be500b2be560f996ff8d7e7 100644 (file)
@@ -7,6 +7,43 @@
 #include "view.h"
 #include "workspaces.h"
 
+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+
+static int
+round_to_increment(int val, int base, int inc)
+{
+       if (base < 0 || inc <= 0)
+               return val;
+       return base + (val - base + inc / 2) / inc * inc;
+}
+
+bool
+xwayland_apply_size_hints(struct view *view, int *w, int *h)
+{
+       if (view->type == LAB_XWAYLAND_VIEW) {
+               xcb_size_hints_t *hints =
+                       xwayland_surface_from_view(view)->size_hints;
+
+               /*
+                * Honor size increments from WM_SIZE_HINTS. Typically, X11
+                * terminal emulators will use WM_SIZE_HINTS to make sure that
+                * the terminal is resized to a width/height evenly divisible by
+                * the cell (character) size.
+                */
+               if (hints) {
+                       *w = round_to_increment(*w, hints->base_width,
+                               hints->width_inc);
+                       *h = round_to_increment(*h, hints->base_height,
+                               hints->height_inc);
+
+                       *w = MAX(*w, MAX(1, hints->min_width));
+                       *h = MAX(*h, MAX(1, hints->min_height));
+                       return true;
+               }
+       }
+       return false;
+}
+
 static struct xwayland_view *
 xwayland_view_from_view(struct view *view)
 {