Merge branch 'master.win32' into 'master'

Some more fixes for Windows

Closes #3157

See merge request GNOME/gtk!2580
This commit is contained in:
Matthias Clasen 2020-09-15 11:12:27 +00:00
commit e4d29ba9fd
4 changed files with 40 additions and 38 deletions

View File

@ -429,7 +429,7 @@ sweeper_game_reveal_cell (SweeperGame *self,
sweeper_game_check_finished (self);
}
void
G_MODULE_EXPORT void
minesweeper_cell_clicked_cb (GtkGridView *gridview,
guint pos,
SweeperGame *game)
@ -437,7 +437,7 @@ minesweeper_cell_clicked_cb (GtkGridView *gridview,
sweeper_game_reveal_cell (game, pos);
}
void
G_MODULE_EXPORT void
minesweeper_new_game_cb (GtkButton *button,
SweeperGame *game)
{

View File

@ -3276,34 +3276,38 @@ gdk_event_translate (MSG *msg,
break;
}
if (LOWORD (msg->wParam) == WA_INACTIVE && msg->lParam != 0)
if (LOWORD (msg->wParam) == WA_INACTIVE)
{
GdkSurface *other_surface = gdk_win32_handle_table_lookup ((HWND) msg->lParam);
if (other_surface != NULL &&
(GDK_IS_POPUP (other_surface) || GDK_IS_DRAG_SURFACE (other_surface)))
if (msg->lParam != 0)
{
/* We're being deactivated in favour of some popup or temp window.
* Since only toplevels can have visual focus, pretend that
* nothing happened.
*/
*ret_valp = 0;
return_val = TRUE;
break;
GdkSurface *other_surface = gdk_win32_handle_table_lookup ((HWND) msg->lParam);
if (other_surface != NULL &&
(GDK_IS_POPUP (other_surface) || GDK_IS_DRAG_SURFACE (other_surface)))
{
/* We're being deactivated in favour of some popup or temp window.
* Since only toplevels can have visual focus, pretend that
* nothing happened.
*/
*ret_valp = 0;
return_val = TRUE;
break;
}
}
gdk_synthesize_surface_state (window, GDK_TOPLEVEL_STATE_FOCUSED, 0);
}
else
{
gdk_synthesize_surface_state (window, 0, GDK_TOPLEVEL_STATE_FOCUSED);
/* Bring any tablet contexts to the top of the overlap order when
* one of our windows is activated.
* NOTE: It doesn't seem to work well if it is done in WM_ACTIVATEAPP
* instead
*/
_gdk_input_set_tablet_active ();
}
if (LOWORD (msg->wParam) == WA_INACTIVE)
gdk_synthesize_surface_state (window, GDK_TOPLEVEL_STATE_FOCUSED, 0);
else
gdk_synthesize_surface_state (window, 0, GDK_TOPLEVEL_STATE_FOCUSED);
/* Bring any tablet contexts to the top of the overlap order when
* one of our windows is activated.
* NOTE: It doesn't seem to work well if it is done in WM_ACTIVATEAPP
* instead
*/
if (LOWORD(msg->wParam) != WA_INACTIVE)
_gdk_input_set_tablet_active ();
break;
case WM_ACTIVATEAPP:

View File

@ -193,8 +193,6 @@ gdk_surface_win32_finalize (GObject *object)
surface->hicon_small = NULL;
}
g_free (surface->decorations);
if (surface->cache_surface)
{
cairo_surface_destroy (surface->cache_surface);
@ -1381,9 +1379,11 @@ get_effective_window_decorations (GdkSurface *window,
*decoration = 0;
if (!GDK_IS_TOPLEVEL (window))
{
return FALSE;
}
return FALSE;
/* we want to apply the "no decorations", if decorations are disabled */
if (!GDK_WIN32_SURFACE (window)->decorate_all)
return TRUE;
if ((impl->hint_flags & GDK_HINT_MIN_SIZE) &&
(impl->hint_flags & GDK_HINT_MAX_SIZE) &&
@ -1779,8 +1779,7 @@ _gdk_win32_surface_lacks_wm_decorations (GdkSurface *window)
* even though GdkWMDecoration docs indicate that 0 does NOT mean
* "no decorations".
*/
if (impl->decorations &&
*impl->decorations == 0)
if (!impl->decorate_all)
return TRUE;
if (GDK_SURFACE_HWND (window) == 0)
@ -1880,6 +1879,7 @@ _gdk_win32_surface_update_style_bits (GdkSurface *window)
if (get_effective_window_decorations (window, &decorations))
{
all = (decorations & GDK_DECOR_ALL);
/* Keep this in sync with the test in _gdk_win32_surface_lacks_wm_decorations() */
update_single_bit (&new_style, all, decorations & GDK_DECOR_BORDER, WS_BORDER);
update_single_bit (&new_style, all, decorations & GDK_DECOR_RESIZEH, WS_THICKFRAME);
@ -4829,6 +4829,7 @@ gdk_win32_toplevel_set_property (GObject *object,
break;
case LAST_PROP + GDK_TOPLEVEL_PROP_DECORATED:
GDK_WIN32_SURFACE (surface)->decorate_all = g_value_get_boolean (value);
_gdk_win32_surface_update_style_bits (surface);
g_object_notify_by_pspec (G_OBJECT (surface), pspec);
break;
@ -4882,10 +4883,7 @@ gdk_win32_toplevel_get_property (GObject *object,
break;
case LAST_PROP + GDK_TOPLEVEL_PROP_DECORATED:
{
GdkWMDecoration decorations = GDK_DECOR_ALL;
g_value_set_boolean (value, get_effective_window_decorations (surface, &decorations));
}
g_value_set_boolean (value, GDK_WIN32_SURFACE (surface)->decorate_all);
break;
case LAST_PROP + GDK_TOPLEVEL_PROP_DELETABLE:

View File

@ -337,8 +337,8 @@ struct _GdkWin32Surface
/* Also remember the same position, but in absolute form. */
GdkRectangle *snap_stash_int;
/* Decorations set by gdk_surface_set_decorations() or NULL if unset */
GdkWMDecoration* decorations;
/* Enable all decorations? */
gboolean decorate_all;
/* No. of windows to force layered windows off */
guint suppress_layered;