Skip to content

Commit b832b04

Browse files
Jeff Walshfejfighter
authored andcommitted
Get parent frame's editor widget allocation for the offset
1 parent 81a82cc commit b832b04

File tree

4 files changed

+31
-29
lines changed

4 files changed

+31
-29
lines changed

src/gtkutil.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,7 +1350,7 @@ xg_create_frame_widgets (struct frame *f)
13501350
wtop = gtk_window_new (type);
13511351
#ifdef HAVE_PGTK
13521352
gtk_widget_add_events(wtop, GDK_ALL_EVENTS_MASK);
1353-
gtk_window_set_hide_titlebar_when_maximized(wtop, TRUE);
1353+
gtk_window_set_hide_titlebar_when_maximized(GTK_WINDOW(wtop), TRUE);
13541354
#endif
13551355

13561356
/* gtk_window_set_has_resize_grip is a Gtk+ 3.0 function but Ubuntu
@@ -1693,10 +1693,8 @@ x_wm_set_size_hint (struct frame *f, long int flags, bool user_position)
16931693
sizeof (size_hints)) != 0)
16941694
{
16951695
block_input ();
1696-
#ifndef HAVE_PGTK
16971696
gtk_window_set_geometry_hints (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
16981697
NULL, &size_hints, hint_flags);
1699-
#endif
17001698
f->output_data.xp->size_hints = size_hints;
17011699
f->output_data.xp->hint_flags = hint_flags;
17021700
unblock_input ();

src/pgtkfns.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1459,12 +1459,14 @@ This function is an internal primitive--use `make-frame' instead. */)
14591459
struct frame *p = XFRAME (parent_frame);
14601460

14611461
block_input ();
1462-
APGTK_TRACE ("x_set_parent_frame x: %d, y: %d, size: %d x %d", f->left_pos, f->top_pos, -1,-1);
1463-
gtk_window_set_transient_for(FRAME_GTK_OUTER_WIDGET(f), FRAME_GTK_OUTER_WIDGET(p));
1464-
gtk_window_set_attached_to(FRAME_GTK_OUTER_WIDGET(f), FRAME_GTK_OUTER_WIDGET(p));
1465-
1462+
PGTK_TRACE ("x_set_parent_frame x: %d, y: %d", f->left_pos, f->top_pos);
1463+
gtk_window_set_transient_for(GTK_WINDOW(FRAME_GTK_OUTER_WIDGET(f)),
1464+
GTK_WINDOW(FRAME_GTK_OUTER_WIDGET(p)));
1465+
gtk_window_set_attached_to(GTK_WINDOW(FRAME_GTK_OUTER_WIDGET(f)),
1466+
FRAME_GTK_WIDGET(p));
1467+
gtk_window_set_destroy_with_parent(GTK_WINDOW(FRAME_GTK_OUTER_WIDGET(f)),
1468+
TRUE);
14661469
gtk_widget_show_all(FRAME_GTK_OUTER_WIDGET(f));
1467-
APGTK_TRACE ("FINISH: x_set_parent_frame x: %d, y: %d, size: %d x %d", f->left_pos, f->top_pos, -1,-1);
14681470
unblock_input ();
14691471
}
14701472

@@ -3184,7 +3186,7 @@ void pgtk_log(const char *file, int lineno, const char *fmt, ...)
31843186
va_end(ap);
31853187
fputc('\n', stderr);
31863188
}
3187-
3189+
#ifdef PGTK_DEBUG
31883190
void pgtk_backtrace(const char *file, int lineno)
31893191
{
31903192
Lisp_Object bt = make_uninit_vector(10);
@@ -3214,7 +3216,7 @@ void pgtk_backtrace(const char *file, int lineno)
32143216

32153217
fprintf(stderr, "%s %.10s:%04d ********\n", timestr, file, lineno);
32163218
}
3217-
#ifdef PGTK_DEBUG
3219+
32183220
#endif
32193221

32203222
#endif

src/pgtkmenu.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -458,9 +458,8 @@ DEFUN ("menu-or-popup-active-p", Fmenu_or_popup_active_p, Smenu_or_popup_active_
458458
doc: /* SKIP: real doc in xmenu.c. */)
459459
(void)
460460
{
461-
struct frame *f;
462-
f = SELECTED_FRAME ();
463-
// return (f->output_data.pgtk->menubar_active > 0) ? Qt : Qnil;
461+
/* struct frame *f = SELECTED_FRAME (); */
462+
/* return (f->output_data.pgtk->menubar_active > 0) ? Qt : Qnil; */
464463
return Qnil;
465464
}
466465

src/pgtkterm.c

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
3838

3939
#include "lisp.h"
4040
#include "blockinput.h"
41+
#include "frame.h"
4142
#include "sysselect.h"
4243
#include "gtkutil.h"
4344
#include "systime.h"
@@ -357,13 +358,24 @@ x_set_offset (struct frame *f, int xoff, int yoff, int change_gravity)
357358
{
358359
/* not working on wayland. */
359360

360-
APGTK_TRACE("x_set_offset: %d,%d,%d.", xoff, yoff, change_gravity);
361+
PGTK_TRACE("x_set_offset: %d,%d,%d.", xoff, yoff, change_gravity);
362+
363+
struct frame *parent = FRAME_PARENT_FRAME(f);
364+
GtkAllocation a = {0};
365+
366+
if (parent)
367+
{
368+
GtkWidget *w = FRAME_GTK_WIDGET(parent);
369+
gtk_widget_get_allocation(w, &a);
370+
}
371+
361372

362373
if (change_gravity > 0)
363374
{
364-
APGTK_TRACE("x_set_offset: change_gravity > 0");
365-
f->top_pos = yoff+60;
366-
f->left_pos = xoff + 25;
375+
PGTK_TRACE("x_set_offset: change_gravity %d > 0, %d %d", change_gravity, a.x , a.y);
376+
f->top_pos = yoff + a.y; //~60
377+
f->left_pos = xoff + a.x; //~25
378+
367379
f->size_hint_flags &= ~ (XNegative | YNegative);
368380
if (xoff < 0)
369381
f->size_hint_flags |= XNegative;
@@ -381,7 +393,7 @@ x_set_offset (struct frame *f, int xoff, int yoff, int change_gravity)
381393
has been realized already, leave it to gtk_window_move to DTRT
382394
and return. Used for Bug#25851 and Bug#25943. */
383395
if (change_gravity != 0 && FRAME_GTK_OUTER_WIDGET (f)) {
384-
APGTK_TRACE("x_set_offset: move to %d,%d.", f->left_pos, f->top_pos);
396+
PGTK_TRACE("x_set_offset: move to %d,%d.", f->left_pos, f->top_pos);
385397
gtk_window_move (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
386398
f->left_pos, f->top_pos);
387399
}
@@ -430,8 +442,6 @@ pgtk_set_window_size (struct frame *f,
430442
for (GtkWidget *w = FRAME_GTK_WIDGET(f); w != NULL; w = gtk_widget_get_parent(w)) {
431443
gint wd, hi;
432444
gtk_widget_get_size_request(w, &wd, &hi);
433-
GtkAllocation alloc;
434-
gtk_widget_get_allocation(w, &alloc);
435445
}
436446

437447
f->output_data.pgtk->preferred_width = pixelwidth;
@@ -697,13 +707,7 @@ x_set_parent_frame (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu
697707
-------------------------------------------------------------------------- */
698708
{
699709
struct frame *p = NULL;
700-
int width = 0, height = 0;
701-
702-
PGTK_TRACE ("x_set_parent_frame x: %d, y: %d, size: %d x %d", f->left_pos, f->top_pos, width, height );
703-
gtk_window_get_size(FRAME_NATIVE_WINDOW(f), &width, &height);
704-
705-
706-
PGTK_TRACE ("x_set_parent_frame x: %d, y: %d, size: %d x %d", f->left_pos, f->top_pos, width, height );
710+
PGTK_TRACE ("x_set_parent_frame x: %d, y: %d", f->left_pos, f->top_pos);
707711

708712
if (!NILP (new_value)
709713
&& (!FRAMEP (new_value)
@@ -722,7 +726,6 @@ x_set_parent_frame (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu
722726
gtk_window_set_attached_to(FRAME_NATIVE_WINDOW(f), FRAME_GTK_WIDGET(p));
723727
gtk_window_move(FRAME_NATIVE_WINDOW(f), f->left_pos, f->top_pos);
724728
gtk_window_set_keep_above(FRAME_NATIVE_WINDOW(f), true);
725-
//fill this in
726729
unblock_input ();
727730

728731
fset_parent_frame (f, new_value);
@@ -2683,7 +2686,6 @@ pgtk_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x,
26832686
{
26842687
PGTK_TRACE("draw_window_cursor: %d, %d, %d, %d, %d, %d.",
26852688
x, y, cursor_type, cursor_width, on_p, active_p);
2686-
26872689
if (on_p)
26882690
{
26892691
w->phys_cursor_type = cursor_type;
@@ -2732,6 +2734,7 @@ pgtk_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x,
27322734
xic_set_preeditarea (w, x, y);
27332735
#endif
27342736
}
2737+
27352738
}
27362739

27372740
static void

0 commit comments

Comments
 (0)