]> git.eshelyaron.com Git - emacs.git/commitdiff
Obey decorator-specified width and height of tooltip frames on Haiku
authorPo Lu <luangruo@yahoo.com>
Sat, 5 Mar 2022 10:20:04 +0000 (10:20 +0000)
committerPo Lu <luangruo@yahoo.com>
Sat, 5 Mar 2022 10:20:04 +0000 (10:20 +0000)
* src/haiku_support.cc (BWindow_dimensions): New functions.
* src/haiku_support.h: Update prototypes.
* src/haikufns.c (Fx_show_tip): Use actual dimensions, because
the decorator might specify a minimum width and height for the
tooltip frame.
* src/haikuterm.c (haiku_update_size_hints): Ignore tooltip
frames.

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

index 20d04163fc9ebf50a1e966c01763949c8e92cc01..057464c9088607754333974b91d80de14ce7e1b2 100644 (file)
@@ -2080,6 +2080,16 @@ BWindow_set_offset (void *window, int x, int y)
     wn->MoveTo (x, y);
 }
 
+void
+BWindow_dimensions (void *window, int *width, int *height)
+{
+  BWindow *w = (BWindow *) window;
+  BRect frame = w->Frame ();
+
+  *width = BE_RECT_WIDTH (frame);
+  *height = BE_RECT_HEIGHT (frame);
+}
+
 /* Iconify WINDOW.  */
 void
 BWindow_iconify (void *window)
index 9d13cae47c29a87606cebe2df799883d0084a6aa..04079edbbc557ca92f26f1423c3967c551a24341 100644 (file)
@@ -939,6 +939,9 @@ extern "C"
   extern haiku_font_family_or_style *
   be_list_font_families (size_t *length);
 
+  extern void
+  BWindow_dimensions (void *window, int *width, int *height);
+
 #ifdef __cplusplus
   extern void *
   find_appropriate_view_for_draw (void *vw);
index ff5082030f18ee3721fdc0140f12718410b59148..545edb27ae017fc7fe0a76d33393cf888c908ed7 100644 (file)
@@ -2201,6 +2201,9 @@ DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
   block_input ();
   void *wnd = FRAME_HAIKU_WINDOW (tip_f);
   BWindow_resize (wnd, width, height);
+  /* The window decorator might cause the actual width and height to
+     be larger than WIDTH and HEIGHT, so use the actual sizes.  */
+  BWindow_dimensions (wnd, &width, &height);
   BView_resize_to (FRAME_HAIKU_VIEW (tip_f), width, height);
   BView_set_view_cursor (FRAME_HAIKU_VIEW (tip_f),
                         FRAME_OUTPUT_DATA (f)->current_cursor);
index ac087e3bec5af6082a4cc9e062bf35543f631944..c44b350c5831d6289d96cc6a7dff00f964a41206 100644 (file)
@@ -140,6 +140,9 @@ haiku_update_size_hints (struct frame *f)
   int base_width, base_height;
   eassert (FRAME_HAIKU_P (f) && FRAME_HAIKU_WINDOW (f));
 
+  if (f->tooltip)
+    return;
+
   base_width = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0);
   base_height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, 0);