forked from AuroraMiddleware/gtk
Changes to allow "no input" windows (#64613):
Thu Dec 11 00:35:12 2003 Matthias Clasen <maclas@gmx.de> Changes to allow "no input" windows (#64613): * gdk/gdkwindow.h (struct _GdkWindowObject): Add a new boolean field accept_focus. * gdk/gdkwindow.h (gdk_window_set_accept_focus): New function to set it. * gtk/gtkwindow.[hc]: Add a boolean property "accept_focus" and gtk_window_get_focus() and gtk_window_set_focus(). * gdk/win32/gdkwindow-win32.c (gdk_window_new): * gdk/linux-fb/gdkwindow-fb.c (gdk_window_new): * gdk/x11/gdkwindow-x11.c (gdk_window_set_new): Initialize the accept_focus field to TRUE. * gdk/win32/gdkwindow-win32.c (gdk_window_set_accept_focus): * gdk/linux-fb/gdkwindow-fb.c (gdk_window_set_accept_focus): * gdk/x11/gdkwindow-x11.c (gdk_window_set_accept_focus): Implementations for the various backends. The Win32 and linux-fb implementations set the accept_focus field, but don't use it yet to actually implement noinput windows. The X implementation updates the WM_HINTS to select the globally active input model (see the ICCCM) if accept_focus is FALSE. * gdk/x11/gdkevents-x11.c (gdk_wm_protocols_filter): Ignore the WM_TAKE_FOCUS message if accept_focus is FALSE.
This commit is contained in:
parent
c9c99b3f1b
commit
5fb61f3075
30
ChangeLog
30
ChangeLog
@ -1,3 +1,33 @@
|
||||
Thu Dec 11 00:35:12 2003 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
Changes to allow "no input" windows (#64613):
|
||||
|
||||
* gdk/gdkwindow.h (struct _GdkWindowObject): Add a new boolean
|
||||
field accept_focus.
|
||||
|
||||
* gdk/gdkwindow.h (gdk_window_set_accept_focus): New function to
|
||||
set it.
|
||||
|
||||
* gtk/gtkwindow.[hc]: Add a boolean property "accept_focus"
|
||||
and gtk_window_get_focus() and gtk_window_set_focus().
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_new):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_new):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_new):
|
||||
Initialize the accept_focus field to TRUE.
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_set_accept_focus):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_set_accept_focus):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_accept_focus):
|
||||
Implementations for the various backends. The Win32 and linux-fb
|
||||
implementations set the accept_focus field, but don't use it yet
|
||||
to actually implement noinput windows. The X implementation updates
|
||||
the WM_HINTS to select the globally active input model (see the
|
||||
ICCCM) if accept_focus is FALSE.
|
||||
|
||||
* gdk/x11/gdkevents-x11.c (gdk_wm_protocols_filter): Ignore the
|
||||
WM_TAKE_FOCUS message if accept_focus is FALSE.
|
||||
|
||||
2003-12-10 Federico Mena Quintero <federico@ximian.com>
|
||||
|
||||
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||
|
@ -1,3 +1,33 @@
|
||||
Thu Dec 11 00:35:12 2003 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
Changes to allow "no input" windows (#64613):
|
||||
|
||||
* gdk/gdkwindow.h (struct _GdkWindowObject): Add a new boolean
|
||||
field accept_focus.
|
||||
|
||||
* gdk/gdkwindow.h (gdk_window_set_accept_focus): New function to
|
||||
set it.
|
||||
|
||||
* gtk/gtkwindow.[hc]: Add a boolean property "accept_focus"
|
||||
and gtk_window_get_focus() and gtk_window_set_focus().
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_new):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_new):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_new):
|
||||
Initialize the accept_focus field to TRUE.
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_set_accept_focus):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_set_accept_focus):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_accept_focus):
|
||||
Implementations for the various backends. The Win32 and linux-fb
|
||||
implementations set the accept_focus field, but don't use it yet
|
||||
to actually implement noinput windows. The X implementation updates
|
||||
the WM_HINTS to select the globally active input model (see the
|
||||
ICCCM) if accept_focus is FALSE.
|
||||
|
||||
* gdk/x11/gdkevents-x11.c (gdk_wm_protocols_filter): Ignore the
|
||||
WM_TAKE_FOCUS message if accept_focus is FALSE.
|
||||
|
||||
2003-12-10 Federico Mena Quintero <federico@ximian.com>
|
||||
|
||||
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||
|
@ -1,3 +1,33 @@
|
||||
Thu Dec 11 00:35:12 2003 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
Changes to allow "no input" windows (#64613):
|
||||
|
||||
* gdk/gdkwindow.h (struct _GdkWindowObject): Add a new boolean
|
||||
field accept_focus.
|
||||
|
||||
* gdk/gdkwindow.h (gdk_window_set_accept_focus): New function to
|
||||
set it.
|
||||
|
||||
* gtk/gtkwindow.[hc]: Add a boolean property "accept_focus"
|
||||
and gtk_window_get_focus() and gtk_window_set_focus().
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_new):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_new):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_new):
|
||||
Initialize the accept_focus field to TRUE.
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_set_accept_focus):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_set_accept_focus):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_accept_focus):
|
||||
Implementations for the various backends. The Win32 and linux-fb
|
||||
implementations set the accept_focus field, but don't use it yet
|
||||
to actually implement noinput windows. The X implementation updates
|
||||
the WM_HINTS to select the globally active input model (see the
|
||||
ICCCM) if accept_focus is FALSE.
|
||||
|
||||
* gdk/x11/gdkevents-x11.c (gdk_wm_protocols_filter): Ignore the
|
||||
WM_TAKE_FOCUS message if accept_focus is FALSE.
|
||||
|
||||
2003-12-10 Federico Mena Quintero <federico@ximian.com>
|
||||
|
||||
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||
|
@ -1,3 +1,33 @@
|
||||
Thu Dec 11 00:35:12 2003 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
Changes to allow "no input" windows (#64613):
|
||||
|
||||
* gdk/gdkwindow.h (struct _GdkWindowObject): Add a new boolean
|
||||
field accept_focus.
|
||||
|
||||
* gdk/gdkwindow.h (gdk_window_set_accept_focus): New function to
|
||||
set it.
|
||||
|
||||
* gtk/gtkwindow.[hc]: Add a boolean property "accept_focus"
|
||||
and gtk_window_get_focus() and gtk_window_set_focus().
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_new):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_new):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_new):
|
||||
Initialize the accept_focus field to TRUE.
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_set_accept_focus):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_set_accept_focus):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_accept_focus):
|
||||
Implementations for the various backends. The Win32 and linux-fb
|
||||
implementations set the accept_focus field, but don't use it yet
|
||||
to actually implement noinput windows. The X implementation updates
|
||||
the WM_HINTS to select the globally active input model (see the
|
||||
ICCCM) if accept_focus is FALSE.
|
||||
|
||||
* gdk/x11/gdkevents-x11.c (gdk_wm_protocols_filter): Ignore the
|
||||
WM_TAKE_FOCUS message if accept_focus is FALSE.
|
||||
|
||||
2003-12-10 Federico Mena Quintero <federico@ximian.com>
|
||||
|
||||
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||
|
@ -1,3 +1,33 @@
|
||||
Thu Dec 11 00:35:12 2003 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
Changes to allow "no input" windows (#64613):
|
||||
|
||||
* gdk/gdkwindow.h (struct _GdkWindowObject): Add a new boolean
|
||||
field accept_focus.
|
||||
|
||||
* gdk/gdkwindow.h (gdk_window_set_accept_focus): New function to
|
||||
set it.
|
||||
|
||||
* gtk/gtkwindow.[hc]: Add a boolean property "accept_focus"
|
||||
and gtk_window_get_focus() and gtk_window_set_focus().
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_new):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_new):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_new):
|
||||
Initialize the accept_focus field to TRUE.
|
||||
|
||||
* gdk/win32/gdkwindow-win32.c (gdk_window_set_accept_focus):
|
||||
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_set_accept_focus):
|
||||
* gdk/x11/gdkwindow-x11.c (gdk_window_set_accept_focus):
|
||||
Implementations for the various backends. The Win32 and linux-fb
|
||||
implementations set the accept_focus field, but don't use it yet
|
||||
to actually implement noinput windows. The X implementation updates
|
||||
the WM_HINTS to select the globally active input model (see the
|
||||
ICCCM) if accept_focus is FALSE.
|
||||
|
||||
* gdk/x11/gdkevents-x11.c (gdk_wm_protocols_filter): Ignore the
|
||||
WM_TAKE_FOCUS message if accept_focus is FALSE.
|
||||
|
||||
2003-12-10 Federico Mena Quintero <federico@ximian.com>
|
||||
|
||||
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||
|
@ -1,3 +1,8 @@
|
||||
Thu Dec 11 00:04:10 2003 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* gtk/gtk-sections.txt: Add gtk_window_[sg]et_accept_focus().
|
||||
* gdk/gdk-sections.txt: Add gdk_window_set_accept_focus().
|
||||
|
||||
Wed Dec 10 00:09:51 2003 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* gdk/gdk-sections.txt: Add gdk_window_get_group(),
|
||||
|
@ -658,6 +658,7 @@ gdk_window_get_internal_paint_info
|
||||
<SUBSECTION>
|
||||
gdk_window_set_user_data
|
||||
gdk_window_set_override_redirect
|
||||
gdk_window_set_accept_focus
|
||||
gdk_window_add_filter
|
||||
gdk_window_remove_filter
|
||||
GdkFilterFunc
|
||||
|
@ -4376,6 +4376,7 @@ gtk_window_set_role
|
||||
gtk_window_set_type_hint
|
||||
gtk_window_set_skip_taskbar_hint
|
||||
gtk_window_set_skip_pager_hint
|
||||
gtk_window_set_accept_focus
|
||||
gtk_window_get_decorated
|
||||
gtk_window_get_default_icon_list
|
||||
gtk_window_get_default_size
|
||||
@ -4394,6 +4395,7 @@ gtk_window_get_transient_for
|
||||
gtk_window_get_type_hint
|
||||
gtk_window_get_skip_taskbar_hint
|
||||
gtk_window_get_skip_pager_hint
|
||||
gtk_window_get_accept_focus
|
||||
gtk_window_move
|
||||
gtk_window_parse_geometry
|
||||
gtk_window_reshow_with_initial_size
|
||||
|
@ -260,6 +260,8 @@ struct _GdkWindowObject
|
||||
guint modal_hint : 1;
|
||||
|
||||
guint destroyed : 2;
|
||||
|
||||
guint accept_focus : 1;
|
||||
|
||||
GdkEventMask event_mask;
|
||||
};
|
||||
@ -317,6 +319,8 @@ void gdk_window_set_user_data (GdkWindow *window,
|
||||
gpointer user_data);
|
||||
void gdk_window_set_override_redirect (GdkWindow *window,
|
||||
gboolean override_redirect);
|
||||
void gdk_window_set_accept_focus (GdkWindow *window,
|
||||
gboolean accept_focus);
|
||||
void gdk_window_add_filter (GdkWindow *window,
|
||||
GdkFilterFunc function,
|
||||
gpointer data);
|
||||
|
@ -188,6 +188,8 @@ gdk_window_new (GdkWindow *parent,
|
||||
|
||||
private->parent = parent_private;
|
||||
|
||||
private->accept_focus = TRUE;
|
||||
|
||||
if (attributes_mask & GDK_WA_X)
|
||||
x = attributes->x;
|
||||
else
|
||||
@ -1990,6 +1992,22 @@ gdk_window_set_override_redirect (GdkWindow *window,
|
||||
/* N/A */
|
||||
}
|
||||
|
||||
void
|
||||
gdk_window_set_accept_focus (GdkWindow *window,
|
||||
gboolean accept_focus)
|
||||
{
|
||||
GdkWindowObject *private;
|
||||
g_return_if_fail (window != NULL);
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
|
||||
private = (GdkWindowObject *)window;
|
||||
|
||||
accept_focus = accept_focus != FALSE;
|
||||
|
||||
if (private->accept_focus != accept_focus)
|
||||
private->accept_focus = accept_focus;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_window_set_icon (GdkWindow *window,
|
||||
GdkWindow *icon_window,
|
||||
|
@ -468,6 +468,8 @@ gdk_window_new (GdkWindow *parent,
|
||||
|
||||
private->parent = (GdkWindowObject *)parent;
|
||||
|
||||
private->accept_focus = TRUE;
|
||||
|
||||
if (attributes_mask & GDK_WA_X)
|
||||
private->x = attributes->x;
|
||||
else
|
||||
@ -2151,6 +2153,22 @@ gdk_window_set_override_redirect (GdkWindow *window,
|
||||
g_warning ("gdk_window_set_override_redirect not implemented");
|
||||
}
|
||||
|
||||
void
|
||||
gdk_window_set_accept_focus (GdkWindow *window,
|
||||
gboolean accept_focus)
|
||||
{
|
||||
GdkWindowObject *private;
|
||||
g_return_if_fail (window != NULL);
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
|
||||
private = (GdkWindowObject *)window;
|
||||
|
||||
accept_focus = accept_focus != FALSE;
|
||||
|
||||
if (private->accept_focus != accept_focus)
|
||||
private->accept_focus = accept_focus;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_window_set_icon_list (GdkWindow *window,
|
||||
GList *pixbufs)
|
||||
|
@ -1969,11 +1969,12 @@ gdk_wm_protocols_filter (GdkXEvent *xev,
|
||||
else if ((Atom) xevent->xclient.data.l[0] == gdk_x11_get_xatom_by_name_for_display (display, "WM_TAKE_FOCUS"))
|
||||
{
|
||||
GdkToplevelX11 *toplevel = _gdk_x11_window_get_toplevel (event->any.window);
|
||||
GdkWindowObject *private = (GdkWindowObject *)win;
|
||||
|
||||
/* There is no way of knowing reliably whether we are viewable;
|
||||
* _gdk_x11_set_input_focus_safe() traps errors asynchronously.
|
||||
*/
|
||||
if (toplevel)
|
||||
if (toplevel && private->accept_focus)
|
||||
_gdk_x11_set_input_focus_safe (display, toplevel->focus_window,
|
||||
RevertToParent,
|
||||
xevent->xclient.data.l[1]);
|
||||
|
@ -343,6 +343,7 @@ _gdk_windowing_window_init (GdkScreen * screen)
|
||||
static void
|
||||
set_wm_protocols (GdkWindow *window)
|
||||
{
|
||||
GdkWindowObject *private = (GdkWindowObject *)window;
|
||||
GdkDisplay *display = gdk_drawable_get_display (window);
|
||||
Atom protocols[3];
|
||||
|
||||
@ -463,6 +464,8 @@ gdk_window_new (GdkWindow *parent,
|
||||
|
||||
private->parent = (GdkWindowObject *)parent;
|
||||
|
||||
private->accept_focus = TRUE;
|
||||
|
||||
xattributes_mask = 0;
|
||||
|
||||
if (attributes_mask & GDK_WA_X)
|
||||
@ -989,8 +992,8 @@ update_wm_hints (GdkWindow *window,
|
||||
private->state & GDK_WINDOW_STATE_WITHDRAWN)
|
||||
return;
|
||||
|
||||
wm_hints.flags = StateHint;
|
||||
wm_hints.input = True;
|
||||
wm_hints.flags = StateHint | InputHint;
|
||||
wm_hints.input = private->accept_focus ? True : False;
|
||||
wm_hints.initial_state = NormalState;
|
||||
|
||||
if (private->state & GDK_WINDOW_STATE_ICONIFIED)
|
||||
@ -3223,6 +3226,40 @@ gdk_window_set_override_redirect (GdkWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_window_set_accept_focus:
|
||||
* @window: a toplevel #GdkWindow
|
||||
* @accept_focus: %TRUE if the window should receive input focus
|
||||
*
|
||||
* Setting @accept_focus to %FALSE hints the desktop environment that the
|
||||
* window doesn't want to receive input focus.
|
||||
*
|
||||
* On X, it is the responsibility of the window manager to interpret this
|
||||
* hint. ICCCM-compliant window manager usually respect it.
|
||||
*
|
||||
* Since: 2.4
|
||||
**/
|
||||
void
|
||||
gdk_window_set_accept_focus (GdkWindow *window,
|
||||
gboolean accept_focus)
|
||||
{
|
||||
GdkWindowObject *private;
|
||||
g_return_if_fail (window != NULL);
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
|
||||
private = (GdkWindowObject *)window;
|
||||
|
||||
accept_focus = accept_focus != FALSE;
|
||||
|
||||
if (private->accept_focus != accept_focus)
|
||||
{
|
||||
private->accept_focus = accept_focus;
|
||||
|
||||
if (!GDK_WINDOW_DESTROYED (window))
|
||||
update_wm_hints (window, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gdk_window_set_icon_list:
|
||||
|
@ -73,6 +73,7 @@ enum {
|
||||
PROP_TYPE_HINT,
|
||||
PROP_SKIP_TASKBAR_HINT,
|
||||
PROP_SKIP_PAGER_HINT,
|
||||
PROP_ACCEPT_FOCUS,
|
||||
PROP_DECORATED,
|
||||
PROP_GRAVITY,
|
||||
|
||||
@ -159,6 +160,7 @@ struct _GtkWindowPrivate
|
||||
guint fullscreen_initially : 1;
|
||||
guint skips_taskbar : 1;
|
||||
guint skips_pager : 1;
|
||||
guint accept_focus : 1;
|
||||
};
|
||||
|
||||
static void gtk_window_class_init (GtkWindowClass *klass);
|
||||
@ -583,6 +585,21 @@ gtk_window_class_init (GtkWindowClass *klass)
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
/**
|
||||
* GtkWindow:accept-focus-hint:
|
||||
*
|
||||
* Whether the window should receive the input focus.
|
||||
*
|
||||
* Since: 2.4
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ACCEPT_FOCUS,
|
||||
g_param_spec_boolean ("accept_focus",
|
||||
_("Accept focus"),
|
||||
_("TRUE if the window should receive the input focus."),
|
||||
TRUE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
/**
|
||||
* GtkWindow:decorated:
|
||||
*
|
||||
@ -708,6 +725,7 @@ static void
|
||||
gtk_window_init (GtkWindow *window)
|
||||
{
|
||||
GdkColormap *colormap;
|
||||
GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (window);
|
||||
|
||||
GTK_WIDGET_UNSET_FLAGS (window, GTK_NO_WINDOW);
|
||||
GTK_WIDGET_SET_FLAGS (window, GTK_TOPLEVEL);
|
||||
@ -743,7 +761,9 @@ gtk_window_init (GtkWindow *window)
|
||||
window->decorated = TRUE;
|
||||
window->mnemonic_modifier = GDK_MOD1_MASK;
|
||||
window->screen = gdk_screen_get_default ();
|
||||
|
||||
|
||||
priv->accept_focus = TRUE;
|
||||
|
||||
colormap = _gtk_widget_peek_colormap ();
|
||||
if (colormap)
|
||||
gtk_widget_set_colormap (GTK_WIDGET (window), colormap);
|
||||
@ -834,6 +854,10 @@ gtk_window_set_property (GObject *object,
|
||||
gtk_window_set_skip_pager_hint (window,
|
||||
g_value_get_boolean (value));
|
||||
break;
|
||||
case PROP_ACCEPT_FOCUS:
|
||||
gtk_window_set_accept_focus (window,
|
||||
g_value_get_boolean (value));
|
||||
break;
|
||||
case PROP_DECORATED:
|
||||
gtk_window_set_decorated (window, g_value_get_boolean (value));
|
||||
break;
|
||||
@ -923,6 +947,10 @@ gtk_window_get_property (GObject *object,
|
||||
g_value_set_boolean (value,
|
||||
gtk_window_get_skip_pager_hint (window));
|
||||
break;
|
||||
case PROP_ACCEPT_FOCUS:
|
||||
g_value_set_boolean (value,
|
||||
gtk_window_get_accept_focus (window));
|
||||
break;
|
||||
case PROP_DECORATED:
|
||||
g_value_set_boolean (value, gtk_window_get_decorated (window));
|
||||
break;
|
||||
@ -1969,7 +1997,7 @@ gtk_window_get_type_hint (GtkWindow *window)
|
||||
* @setting: %TRUE to keep this window from appearing in the task bar
|
||||
*
|
||||
* Windows may set a hint asking the desktop environment not to display
|
||||
* the window in the task bar. This function toggles this hint.
|
||||
* the window in the task bar. This function sets this hint.
|
||||
*
|
||||
* Since: 2.2
|
||||
**/
|
||||
@ -2023,7 +2051,7 @@ gtk_window_get_skip_taskbar_hint (GtkWindow *window)
|
||||
* @setting: %TRUE to keep this window from appearing in the pager
|
||||
*
|
||||
* Windows may set a hint asking the desktop environment not to display
|
||||
* the window in the pager. This function toggles this hint.
|
||||
* the window in the pager. This function sets this hint.
|
||||
* (A "pager" is any desktop navigation tool such as a workspace
|
||||
* switcher that displays a thumbnail representation of the windows
|
||||
* on the screen.)
|
||||
@ -2074,6 +2102,60 @@ gtk_window_get_skip_pager_hint (GtkWindow *window)
|
||||
return priv->skips_pager;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_window_set_accept_focus:
|
||||
* @window: a #GtkWindow
|
||||
* @setting: %TRUE to let this window receive input focus
|
||||
*
|
||||
* Windows may set a hint asking the desktop environment not to receive
|
||||
* the input focus. This function sets this hint.
|
||||
*
|
||||
* Since: 2.4
|
||||
**/
|
||||
void
|
||||
gtk_window_set_accept_focus (GtkWindow *window,
|
||||
gboolean setting)
|
||||
{
|
||||
GtkWindowPrivate *priv;
|
||||
|
||||
g_return_if_fail (GTK_IS_WINDOW (window));
|
||||
|
||||
priv = GTK_WINDOW_GET_PRIVATE (window);
|
||||
|
||||
setting = setting != FALSE;
|
||||
|
||||
if (priv->accept_focus != setting)
|
||||
{
|
||||
priv->accept_focus = setting;
|
||||
if (GTK_WIDGET_REALIZED (window))
|
||||
gdk_window_set_accept_focus (GTK_WIDGET (window)->window,
|
||||
priv->accept_focus);
|
||||
g_object_notify (G_OBJECT (window), "accept_focus");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_window_get_accept_focus:
|
||||
* @window: a #GtkWindow
|
||||
*
|
||||
* Gets the value set by gtk_window_set_accept_focus().
|
||||
*
|
||||
* Return value: %TRUE if window should receive the input focus
|
||||
*
|
||||
* Since: 2.4
|
||||
**/
|
||||
gboolean
|
||||
gtk_window_get_accept_focus (GtkWindow *window)
|
||||
{
|
||||
GtkWindowPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
|
||||
|
||||
priv = GTK_WINDOW_GET_PRIVATE (window);
|
||||
|
||||
return priv->accept_focus;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_window_set_destroy_with_parent:
|
||||
* @window: a #GtkWindow
|
||||
@ -3833,13 +3915,15 @@ gtk_window_realize (GtkWidget *widget)
|
||||
gdk_window_set_type_hint (widget->window, window->type_hint);
|
||||
|
||||
if (gtk_window_get_skip_pager_hint (window))
|
||||
{
|
||||
g_print ("setting skip pager when realizing\n");
|
||||
gdk_window_set_skip_pager_hint (widget->window, TRUE);
|
||||
}
|
||||
|
||||
if (gtk_window_get_skip_taskbar_hint (window))
|
||||
gdk_window_set_skip_taskbar_hint (widget->window, TRUE);
|
||||
|
||||
if (gtk_window_get_accept_focus (window))
|
||||
gdk_window_set_accept_focus (widget->window, TRUE);
|
||||
else
|
||||
gdk_window_set_accept_focus (widget->window, FALSE);
|
||||
|
||||
if (window->modal)
|
||||
gdk_window_set_modal_hint (widget->window, TRUE);
|
||||
|
@ -201,6 +201,9 @@ gboolean gtk_window_get_skip_taskbar_hint (GtkWindow *window);
|
||||
void gtk_window_set_skip_pager_hint (GtkWindow *window,
|
||||
gboolean setting);
|
||||
gboolean gtk_window_get_skip_pager_hint (GtkWindow *window);
|
||||
void gtk_window_set_accept_focus (GtkWindow *window,
|
||||
gboolean setting);
|
||||
gboolean gtk_window_get_accept_focus (GtkWindow *window);
|
||||
void gtk_window_set_destroy_with_parent (GtkWindow *window,
|
||||
gboolean setting);
|
||||
gboolean gtk_window_get_destroy_with_parent (GtkWindow *window);
|
||||
|
Loading…
Reference in New Issue
Block a user