Skip to content

Commit

Permalink
Merge pull request #68 from masm11/fix/dont-use-gtk-window-api-if-out…
Browse files Browse the repository at this point in the history
…er-widget-is-null

Avoid gtk warnings
  • Loading branch information
Yuuki Harano committed Oct 5, 2020
2 parents 9c369d9 + 9dcbc12 commit 66c4043
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 25 deletions.
60 changes: 53 additions & 7 deletions src/gtkutil.c
Original file line number Diff line number Diff line change
Expand Up @@ -1106,17 +1106,43 @@ xg_frame_set_char_size (struct frame *f, int width, int height)
(f, Qxg_frame_set_char_size_1, width, height,
list2i (gheight, totalheight));

#ifndef HAVE_PGTK
gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
gwidth, totalheight);
#else
if (FRAME_GTK_OUTER_WIDGET (f))
{
gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
gwidth, totalheight);
}
else
{
gtk_widget_set_size_request (FRAME_GTK_WIDGET (f),
gwidth, totalheight);
}
#endif
}
else if (EQ (fullscreen, Qfullheight) && height == FRAME_TEXT_HEIGHT (f))
{
frame_size_history_add
(f, Qxg_frame_set_char_size_2, width, height,
list2i (gwidth, totalwidth));

#ifndef HAVE_PGTK
gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
totalwidth, gheight);
#else
if (FRAME_GTK_OUTER_WIDGET (f))
{
gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
totalwidth, gheight);
}
else
{
gtk_widget_set_size_request (FRAME_GTK_WIDGET (f),
totalwidth, gheight);
}
#endif
}
else if (FRAME_PARENT_FRAME (f) && FRAME_VISIBLE_P (f))
{
Expand Down Expand Up @@ -1888,6 +1914,10 @@ xg_set_background_color (struct frame *f, unsigned long bg)
void
xg_set_undecorated (struct frame *f, Lisp_Object undecorated)
{
#ifdef HAVE_PGTK
if (!FRAME_GTK_OUTER_WIDGET (f))
return;
#endif
if (FRAME_GTK_WIDGET (f))
{
block_input ();
Expand Down Expand Up @@ -1948,6 +1978,10 @@ xg_set_skip_taskbar (struct frame *f, Lisp_Object skip_taskbar)
void
xg_set_no_focus_on_map (struct frame *f, Lisp_Object no_focus_on_map)
{
#ifdef HAVE_PGTK
if (!FRAME_GTK_OUTER_WIDGET (f))
return;
#endif
block_input ();
if (FRAME_GTK_WIDGET (f))
{
Expand All @@ -1963,14 +1997,12 @@ xg_set_no_focus_on_map (struct frame *f, Lisp_Object no_focus_on_map)
void
xg_set_no_accept_focus (struct frame *f, Lisp_Object no_accept_focus)
{
block_input ();
if (
#ifndef HAVE_PGTK
FRAME_GTK_WIDGET (f)
#else
FRAME_GTK_OUTER_WIDGET (f)
#ifdef HAVE_PGTK
if (!FRAME_GTK_OUTER_WIDGET (f))
return;
#endif
)
block_input ();
if (FRAME_GTK_WIDGET (f))
{
GtkWindow *gwin = GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f));
gboolean g_no_accept_focus = NILP (no_accept_focus) ? TRUE : FALSE;
Expand Down Expand Up @@ -2002,6 +2034,10 @@ xg_set_override_redirect (struct frame *f, Lisp_Object override_redirect)
void
xg_set_frame_icon (struct frame *f, Pixmap icon_pixmap, Pixmap icon_mask)
{
#ifdef HAVE_PGTK
if (!FRAME_GTK_OUTER_WIDGET (f))
return;
#endif
GdkPixbuf *gp = xg_get_pixbuf_from_pix_and_mask (f,
icon_pixmap,
icon_mask);
Expand Down Expand Up @@ -2545,6 +2581,11 @@ xg_get_file_name (struct frame *f,
int filesel_done = 0;
xg_get_file_func func;

#ifdef HAVE_PGTK
if (!FRAME_GTK_OUTER_WIDGET (f))
error("Can't open dialog from child frames");
#endif

#ifdef HAVE_GTK_FILE_SELECTION_NEW

if (xg_uses_old_file_dialog ())
Expand Down Expand Up @@ -2628,6 +2669,11 @@ xg_get_font (struct frame *f, const char *default_name)
int done = 0;
Lisp_Object font = Qnil;

#ifdef HAVE_PGTK
if (!FRAME_GTK_OUTER_WIDGET (f))
error("Can't open dialog from child frames");
#endif

w = gtk_font_chooser_dialog_new
("Pick a font", GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));

Expand Down
16 changes: 14 additions & 2 deletions src/pgtkfns.c
Original file line number Diff line number Diff line change
Expand Up @@ -719,6 +719,9 @@ xg_set_icon (struct frame *f, Lisp_Object file)
bool result = false;
Lisp_Object found;

if (!FRAME_GTK_OUTER_WIDGET (f))
return false;

found = image_find_image_file (file);

if (!NILP (found))
Expand Down Expand Up @@ -755,6 +758,9 @@ xg_set_icon_from_xpm_data (struct frame *f, const char **data)
if (!pixbuf)
return false;

if (!FRAME_GTK_OUTER_WIDGET (f))
return false;

gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), pixbuf);
g_object_unref (pixbuf);
return true;
Expand All @@ -764,6 +770,9 @@ static void
pgtk_set_sticky (struct frame *f, Lisp_Object new_value,
Lisp_Object old_value)
{
if (!FRAME_GTK_OUTER_WIDGET (f))
return;

if (!NILP (new_value))
gtk_window_stick (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
else
Expand Down Expand Up @@ -3062,6 +3071,9 @@ Text larger than the specified size is clipped. */)
frame = selected_frame;
f = decode_window_system_frame (frame);

if (!FRAME_GTK_OUTER_WIDGET (f))
return unbind_to (count, Qnil);

if (NILP (timeout))
timeout = make_fixnum (5);
else
Expand Down Expand Up @@ -3464,7 +3476,7 @@ The coordinates X and Y are interpreted in pixels relative to a position
(Lisp_Object x, Lisp_Object y)
{
struct frame *f = SELECTED_FRAME ();
GtkWidget *widget = FRAME_GTK_OUTER_WIDGET (f);
GtkWidget *widget = gtk_widget_get_toplevel (FRAME_WIDGET (f));
GdkWindow *window = gtk_widget_get_window (widget);
GdkDisplay *gdpy = gdk_window_get_display (window);
GdkScreen *gscr = gdk_window_get_screen (window);
Expand All @@ -3485,7 +3497,7 @@ position (0, 0) of the selected frame's terminal. */)
(void)
{
struct frame *f = SELECTED_FRAME ();
GtkWidget *widget = FRAME_GTK_OUTER_WIDGET (f);
GtkWidget *widget = gtk_widget_get_toplevel (FRAME_WIDGET (f));
GdkWindow *window = gtk_widget_get_window (widget);
GdkDisplay *gdpy = gdk_window_get_display (window);
GdkScreen *gscr;
Expand Down
10 changes: 10 additions & 0 deletions src/pgtkmenu.c
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,11 @@ pgtk_menu_show (struct frame *f, int x, int y, int menuflags,

*error_name = NULL;

if (!FRAME_GTK_OUTER_WIDGET (f)) {
*error_name = "Can't popup from child frames.";
return Qnil;
}

if (menu_items_used <= MENU_ITEMS_PANE_LENGTH)
{
*error_name = "Empty menu";
Expand Down Expand Up @@ -944,6 +949,11 @@ pgtk_dialog_show (struct frame *f, Lisp_Object title,

*error_name = NULL;

if (!FRAME_GTK_OUTER_WIDGET (f)) {
*error_name = "Can't popup from child frames.";
return Qnil;
}

if (menu_items_n_panes > 1)
{
*error_name = "Multiple panes in dialog box";
Expand Down
37 changes: 21 additions & 16 deletions src/pgtkterm.c
Original file line number Diff line number Diff line change
Expand Up @@ -4659,7 +4659,7 @@ pgtk_focus_frame (struct frame *f, bool noactivate)

GtkWidget *wid = FRAME_GTK_OUTER_WIDGET (f);

if (dpyinfo->x_focus_frame != f)
if (dpyinfo->x_focus_frame != f && wid != NULL)
{
block_input ();
gtk_window_present (GTK_WINDOW (wid));
Expand Down Expand Up @@ -4717,9 +4717,9 @@ x_set_frame_alpha (struct frame *f)
}
#endif

set_opacity_recursively (FRAME_GTK_OUTER_WIDGET (f), &alpha);
set_opacity_recursively (FRAME_WIDGET (f), &alpha);
/* without this, blending mode is strange on wayland. */
gtk_widget_queue_resize_no_redraw (FRAME_GTK_OUTER_WIDGET (f));
gtk_widget_queue_resize_no_redraw (FRAME_WIDGET (f));
}

static void
Expand Down Expand Up @@ -4890,12 +4890,14 @@ x_new_focus_frame (struct pgtk_display_info *dpyinfo, struct frame *frame)
dpyinfo->x_focus_frame = frame;

if (old_focus && old_focus->auto_lower)
gdk_window_lower (gtk_widget_get_window
(FRAME_GTK_OUTER_WIDGET (old_focus)));
if (FRAME_GTK_OUTER_WIDGET (old_focus))
gdk_window_lower (gtk_widget_get_window
(FRAME_GTK_OUTER_WIDGET (old_focus)));

if (dpyinfo->x_focus_frame && dpyinfo->x_focus_frame->auto_raise)
gdk_window_raise (gtk_widget_get_window
(FRAME_GTK_OUTER_WIDGET (dpyinfo->x_focus_frame)));
if (FRAME_GTK_OUTER_WIDGET (dpyinfo->x_focus_frame))
gdk_window_raise (gtk_widget_get_window
(FRAME_GTK_OUTER_WIDGET (dpyinfo->x_focus_frame)));
}

pgtk_frame_rehighlight (dpyinfo);
Expand Down Expand Up @@ -6566,15 +6568,18 @@ pgtk_set_event_handler (struct frame *f)
GDK_ACTION_COPY);
gtk_drag_dest_add_uri_targets (FRAME_GTK_WIDGET (f));

g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)),
"window-state-event", G_CALLBACK (window_state_event),
NULL);
g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)), "delete-event",
G_CALLBACK (delete_event), NULL);
g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)), "event",
G_CALLBACK (pgtk_handle_event), NULL);
g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)), "configure-event",
G_CALLBACK (configure_event), NULL);
if (FRAME_GTK_OUTER_WIDGET (f))
{
g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)),
"window-state-event", G_CALLBACK (window_state_event),
NULL);
g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)), "delete-event",
G_CALLBACK (delete_event), NULL);
g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)), "event",
G_CALLBACK (pgtk_handle_event), NULL);
g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)), "configure-event",
G_CALLBACK (configure_event), NULL);
}

g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "map-event",
G_CALLBACK (map_event), NULL);
Expand Down

0 comments on commit 66c4043

Please sign in to comment.