]> git.eshelyaron.com Git - emacs.git/commitdiff
Implement `sticky' frame parameter on Haiku
authorPo Lu <luangruo@yahoo.com>
Sat, 7 May 2022 06:17:46 +0000 (06:17 +0000)
committerPo Lu <luangruo@yahoo.com>
Sat, 7 May 2022 06:18:02 +0000 (06:18 +0000)
* src/haiku_support.cc (BWindow_set_sticky): New function.
* src/haiku_support.h: Update prototypes.
* src/haikufns.c (haiku_set_sticky, haiku_frame_parm_handlers):
New frame param handler.

src/haiku_support.cc
src/haiku_support.h
src/haikufns.c

index 300a78cd73be25fb9862fc5f3f72177caac842b6..105da3969ff7cfdb90af756d9173067e60096ee9 100644 (file)
@@ -5067,3 +5067,18 @@ be_select_font (void (*process_pending_signals_function) (void),
 
   return true;
 }
+
+void
+BWindow_set_sticky (void *window, bool sticky)
+{
+  BWindow *w = (BWindow *) window;
+
+  if (w->LockLooper ())
+    {
+      w->SetFlags (sticky ? (w->Flags ()
+                            | B_SAME_POSITION_IN_ALL_WORKSPACES)
+                  : w->Flags () & ~B_SAME_POSITION_IN_ALL_WORKSPACES);
+
+      w->UnlockLooper ();
+    }
+}
index 1433783c9fb8e1199b049c00dd531c072064d4ed..5ded9300d8add812f345b9d19a85feb75c243379 100644 (file)
@@ -504,6 +504,7 @@ extern bool BWindow_is_active (void *);
 extern void BWindow_set_override_redirect (void *, bool);
 extern void BWindow_dimensions (void *, int *, int *);
 extern void BWindow_set_z_group (void *, enum haiku_z_group);
+extern void BWindow_set_sticky (void *, bool);
 extern void BWindow_Flush (void *);
 
 extern void BFont_close (void *);
index 2f26623fa5c3c103c921452dc06ba4ca674deebc..8596317de25dd3bd0336d8390ad6343f037d3316 100644 (file)
@@ -1783,6 +1783,15 @@ haiku_set_inhibit_double_buffering (struct frame *f,
   unblock_input ();
 }
 
+static void
+haiku_set_sticky (struct frame *f, Lisp_Object new_value,
+                 Lisp_Object old_value)
+{
+  block_input ();
+  BWindow_set_sticky (FRAME_HAIKU_WINDOW (f), !NILP (new_value));
+  unblock_input ();
+}
+
 \f
 
 DEFUN ("haiku-set-mouse-absolute-pixel-position",
@@ -2713,7 +2722,7 @@ frame_parm_handler haiku_frame_parm_handlers[] =
     gui_set_fullscreen,
     gui_set_font_backend,
     gui_set_alpha,
-    NULL, /* set sticky */
+    haiku_set_sticky,
     NULL, /* set tool bar pos */
     haiku_set_inhibit_double_buffering,
     haiku_set_undecorated,