Hello community, here is the log from the commit of package muffin for openSUSE:Factory checked in at 2018-06-19 12:04:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/muffin (Old) and /work/SRC/openSUSE:Factory/.muffin.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "muffin" Tue Jun 19 12:04:05 2018 rev:16 rq:617246 version:3.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/muffin/muffin.changes 2018-05-11 09:15:52.771722797 +0200 +++ /work/SRC/openSUSE:Factory/.muffin.new/muffin.changes 2018-06-19 12:04:07.537002535 +0200 @@ -1,0 +2,32 @@ +Sat Jun 16 15:48:41 UTC 2018 - sor.ale...@meowr.ru + +- Update to version 3.8.2: + * utils: Fix zenity dialogue - don't use monospace for the + heading, don't italicise the info text, force a wider dialogue + window. + * window.c: Change behaviour of meta_window_get_all_monitors() + to return only those monitors of a fullscreen window that are + completely covered by the window. + * screen.c: Ignore dock-type windows when determining fullscreen + window coverage on a monitor. + * window.c: Queue a fullscreen check when a window leaves a + monitor. + * window: Move legacy fullscreen workaround out of constraints + and into meta_window_move_resize_request. + * window.c: Set the "saved_maximize" internal state based on the + resulting state of the window after a maximize call, not the + directions that were requested for the call. + * window.c: Always use the full window extents (including + invisible) when running meta_window_get_all_monitors() on CSD + windows. + * meta-window-actor.c: Default to using shadows on windows. + * Software rendering: Don't remove shadows. + * screen.c: Ignore transient windows when working through the + stack figuring out if a monitor is fullscreened or not. + * window-props.c: When reloading the transient_for property, if + the given window id is not found, search existing windows' + client leader ids for a match, and assign the match's window as + the transient parent instead (this seems to be typical for Qt + applications). + +------------------------------------------------------------------- Old: ---- muffin-3.8.1.tar.gz New: ---- muffin-3.8.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ muffin.spec ++++++ --- /var/tmp/diff_new_pack.wNBGpa/_old 2018-06-19 12:04:08.904951747 +0200 +++ /var/tmp/diff_new_pack.wNBGpa/_new 2018-06-19 12:04:08.908951597 +0200 @@ -20,7 +20,7 @@ %define sover 0 %define typelib typelib-1_0-MetaMuffin-0_0 Name: muffin -Version: 3.8.1 +Version: 3.8.2 Release: 0 Summary: Cinnamon Desktop default window manager License: GPL-2.0-or-later AND MIT ++++++ muffin-3.8.1.tar.gz -> muffin-3.8.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/configure.ac new/muffin-3.8.2/configure.ac --- old/muffin-3.8.1/configure.ac 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/configure.ac 2018-06-08 12:50:55.000000000 +0200 @@ -2,7 +2,7 @@ m4_define([muffin_major_version], [3]) m4_define([muffin_minor_version], [8]) -m4_define([muffin_micro_version], [1]) +m4_define([muffin_micro_version], [2]) m4_define([muffin_version], [muffin_major_version.muffin_minor_version.muffin_micro_version]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/debian/changelog new/muffin-3.8.2/debian/changelog --- old/muffin-3.8.1/debian/changelog 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/debian/changelog 2018-06-08 12:50:55.000000000 +0200 @@ -1,3 +1,28 @@ +muffin (3.8.2) tara; urgency=medium + + [ Michael Webster ] + * utils: Fix zenity dialog - don't use monospace for the heading, don't italicize the info text, force a wider dialog window. + * window.c: Change behavior of meta_window_get_all_monitors() to return only those monitors of a fullscreen window that are completely covered by the window. + * screen.c: Ignore dock-type windows when determining fullscreen window coverage on a monitor. + + [ itzexor ] + * window.c: queue a fullscreen check when a window leaves a monitor + + [ Michael Webster ] + * window: Move legacy fullscreen workaround out of constraints and into meta_window_move_resize_request. + * window.c: set the "saved_maximize" internal state based on the resulting state of the window after a maximize call, not the directions that were requested for the call. + * window.c: Always use the full window extents (including invisible) when running meta_window_get_all_monitors() on CSD windows. + * meta-window-actor.c: Default to using shadows on windows. + + [ Clement Lefebvre ] + * Software rendering: Don't remove shadows + + [ Michael Webster ] + * screen.c: Ignore transient windows when working thru the stack figuring out if a monitor is fullscreened or not. + * window-props.c: when reloading the transient_for property, if the given window id is not found, search existing windows' client leader ids for a match, and assign the match's window as the transient parent instead. (this seems to be typical for QT apps) + + -- Clement Lefebvre <r...@linuxmint.com> Fri, 08 Jun 2018 11:50:32 +0100 + muffin (3.8.1) tara; urgency=medium [ Michael Webster ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/src/compositor/meta-window-actor.c new/muffin-3.8.2/src/compositor/meta-window-actor.c --- old/muffin-3.8.1/src/compositor/meta-window-actor.c 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/src/compositor/meta-window-actor.c 2018-06-08 12:50:55.000000000 +0200 @@ -830,12 +830,17 @@ ) return TRUE; + if (meta_window_is_client_decorated (priv->window)) + { + return FALSE; + } + #if 0 if (window_type == META_WINDOW_TOOLTIP) return TRUE; #endif - return FALSE; + return TRUE; } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/src/core/constraints.c new/muffin-3.8.2/src/core/constraints.c --- old/muffin-3.8.1/src/core/constraints.c 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/src/core/constraints.c 2018-06-08 12:50:55.000000000 +0200 @@ -442,25 +442,6 @@ meta_workspace_get_onmonitor_region (cur_workspace, monitor_info->number); - /* Workaround braindead legacy apps that don't know how to - * fullscreen themselves properly. - */ - if (meta_prefs_get_force_fullscreen() && - (window->decorated && !meta_window_is_client_decorated (window)) && - meta_rectangle_equal (new, &monitor_info->rect) && - window->has_fullscreen_func && - !window->fullscreen) - { - /* - meta_topic (META_DEBUG_GEOMETRY, - */ - meta_warning ( - "Treating resize request of legacy application %s as a " - "fullscreen request\n", - window->desc); - meta_window_make_fullscreen_internal (window); - } - /* Log all this information for debugging */ meta_topic (META_DEBUG_GEOMETRY, "Setting up constraint info:\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/src/core/delete.c new/muffin-3.8.2/src/core/delete.c --- old/muffin-3.8.1/src/core/delete.c 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/src/core/delete.c 2018-06-08 12:50:55.000000000 +0200 @@ -108,13 +108,21 @@ /* Translators: %s is a window title */ if (window_title) - tmp = g_markup_printf_escaped (_("<tt>%s</tt> is not responding."), - window_title); + { + // FIXME: Didn't want to lose translations for this.. needed to remove the + // monospace tt but it's part of the translation. Cancel them out for now. + gchar *unmarkup_title = g_markup_printf_escaped("</tt>%s<tt>", window_title); + + tmp = g_strdup_printf (_("<tt>%s</tt> is not responding."), + unmarkup_title); + + g_free (unmarkup_title); + } else tmp = g_strdup (_("Application is not responding.")); window_content = g_strdup_printf ( - "<big><b>%s</b></big>\n\n<i>%s</i>", + "<big><b>%s</b></big>\n\n%s", tmp, _("You may choose to wait a short while for it to " "continue or force the application to quit entirely.")); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/src/core/main.c new/muffin-3.8.2/src/core/main.c --- old/muffin-3.8.1/src/core/main.c 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/src/core/main.c 2018-06-08 12:50:55.000000000 +0200 @@ -465,7 +465,6 @@ /* Clutter envs not set, since they won't work after Clutter init */ g_setenv ("CINNAMON_SOFTWARE_RENDERING", "1", FALSE); g_setenv ("CINNAMON_SLOWDOWN_FACTOR", "0.0001", FALSE); - g_setenv ("MUFFIN_NO_SHADOWS", "1", FALSE); meta_warning ("Software rendering detected: %s\n", renderer); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/src/core/screen.c new/muffin-3.8.2/src/core/screen.c --- old/muffin-3.8.1/src/core/screen.c 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/src/core/screen.c 2018-06-08 12:50:55.000000000 +0200 @@ -3797,9 +3797,10 @@ screen->check_fullscreen_later = 0; - /* We consider a monitor in fullscreen if it contains a fullscreen window; - * however we make an exception for maximized windows above the fullscreen - * one, as in that case window+chrome fully obscure the fullscreen window. + /* We consider a monitor in fullscreen if it contains a fullscreen window that + * is the current top-most window in that monitor. If any window (other than a + * dock/toolbar type) is above the fullscreen window, the monitor is no longer + * considered to be in fullscreen */ for (window = meta_stack_get_top (screen->stack); window; @@ -3807,7 +3808,7 @@ { gboolean covers_monitors = FALSE; - if (window->screen != screen || window->hidden) + if (window->screen != screen || window->hidden || window->xtransient_for) continue; if (window->fullscreen) @@ -3824,7 +3825,10 @@ if (meta_window_is_monitor_sized (window)) covers_monitors = TRUE; } - else + /* Any window type except dock/toolbar that comes before a fullscreen one + * will preempt fullscreen for that monitor. */ + else if (window->type != META_WINDOW_DOCK && + window->type != META_WINDOW_TOOLBAR) { int monitor_index = meta_window_get_monitor (window); /* + 1 to avoid NULL */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/src/core/util.c new/muffin-3.8.2/src/core/util.c --- old/muffin-3.8.1/src/core/util.c 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/src/core/util.c 2018-06-08 12:50:55.000000000 +0200 @@ -647,6 +647,8 @@ append_argument (args, ""); append_argument (args, "--text"); append_argument (args, message); + append_argument (args, "--width"); + append_argument (args, "400"); if (timeout) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/src/core/window-props.c new/muffin-3.8.2/src/core/window-props.c --- old/muffin-3.8.1/src/core/window-props.c 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/src/core/window-props.c 2018-06-08 12:50:55.000000000 +0200 @@ -1636,6 +1636,60 @@ meta_window_queue (window, META_QUEUE_UPDATE_ICON | META_QUEUE_MOVE_RESIZE); } +typedef struct +{ + MetaWindow *window; + Window transient_for_xid; +} FindByLeaderData; + +static void +find_window_by_client_leader (MetaScreen *screen, + MetaWindow *window, + gpointer user_data) +{ + FindByLeaderData *data = (FindByLeaderData *) user_data; + + if (data->window != NULL) + { + return; + } + + if (window->xclient_leader == None) + { + return; + } + + if (window->xclient_leader == data->transient_for_xid) + { + data->window = window; + } +} + +static MetaWindow * +lookup_parent_by_client_leader (MetaWindow *transient, + Window xtransient_for) +{ + MetaWindow *parent; + FindByLeaderData *data; + + data = g_new0 (FindByLeaderData, 1); + + data->transient_for_xid = xtransient_for; + + meta_screen_foreach_window (transient->screen, + (MetaScreenWindowFunc) find_window_by_client_leader, + data); + + if (data != NULL) + { + parent = data->window; + } + + g_free (data); + + return parent; +} + static void reload_transient_for (MetaWindow *window, MetaPropValue *value, @@ -1649,12 +1703,31 @@ transient_for = value->v.xwindow; parent = meta_display_lookup_x_window (window->display, transient_for); + if (!parent) { - meta_warning (_("Invalid WM_TRANSIENT_FOR window 0x%lx specified " - "for %s.\n"), - transient_for, window->desc); - transient_for = None; + /* QT programs appear to set the transient-for hint to the program's WM_CLIENT_LEADER + * instead of the toplevel window's xid. This causes muffin to throw out their transient + * state. Since we know the client leader id of existing windows, we can do a quick search + * and match up to the correct parent so our stacking and fullscreen detection code works + * properly */ + + parent = lookup_parent_by_client_leader (window, transient_for); + + if (parent) + { + transient_for = parent->xwindow; + + meta_verbose ("WM_TRANSIENT_FOR was parent window 0x%lx's WM_CLIENT_LEADER. " + "using the xid instead for %s.\n", transient_for, window->desc); + } + else + { + meta_warning (_("Invalid WM_TRANSIENT_FOR window 0x%lx specified " + "for %s.\n"), + transient_for, window->desc); + transient_for = None; + } } /* Make sure there is not a loop */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/muffin-3.8.1/src/core/window.c new/muffin-3.8.2/src/core/window.c --- old/muffin-3.8.1/src/core/window.c 2018-05-06 16:14:22.000000000 +0200 +++ new/muffin-3.8.2/src/core/window.c 2018-06-08 12:50:55.000000000 +0200 @@ -3491,9 +3491,6 @@ window->tile_mode = META_TILE_NONE; normalize_tile_state (window); - if (maximize_horizontally && maximize_vertically) - window->saved_maximize = TRUE; - window->maximized_horizontally = window->maximized_horizontally || maximize_horizontally; window->maximized_vertically = @@ -3501,6 +3498,11 @@ if (maximize_horizontally || maximize_vertically) window->force_save_user_rect = FALSE; + if (window->maximized_horizontally && window->maximized_vertically) + { + window->saved_maximize = TRUE; + } + /* Update the edge constraints */ update_edge_constraints (window);; @@ -3633,14 +3635,34 @@ int i; monitors = g_array_new (FALSE, FALSE, sizeof (int)); - meta_window_get_outer_rect (window, &window_rect); + + if (meta_window_is_client_decorated (window)) + { + window_rect = window->rect; + } + else + { + meta_window_get_outer_rect (window, &window_rect); + } for (i = 0; i < window->screen->n_monitor_infos; i++) { MetaRectangle *monitor_rect = &window->screen->monitor_infos[i].rect; - if (meta_rectangle_overlap (&window_rect, monitor_rect)) - g_array_append_val (monitors, i); + if (window->fullscreen) + { + if (meta_rectangle_contains_rect (&window_rect, monitor_rect)) + { + g_array_append_val (monitors, i); + } + } + else + { + if (meta_rectangle_overlap (&window_rect, monitor_rect)) + { + g_array_append_val (monitors, i); + } + } } if (length) @@ -4878,8 +4900,10 @@ window->screen->active_workspace != window->workspace) meta_window_change_workspace (window, window->screen->active_workspace); - if (old) + if (old) { + meta_screen_queue_check_fullscreen (window->screen); g_signal_emit_by_name (window->screen, "window-left-monitor", old->number, window); + } g_signal_emit_by_name (window->screen, "window-entered-monitor", window->monitor->number, window); g_signal_emit_by_name (window->screen, "window-monitor-changed", window, window->monitor->number); @@ -6594,6 +6618,39 @@ flags |= META_IS_RESIZE_ACTION; if (flags & (META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION)) + { + MetaRectangle rect, monitor_rect; + + rect.x = x; + rect.y = y; + rect.width = width; + rect.height = height; + + meta_screen_get_monitor_geometry (window->screen, window->monitor->number, &monitor_rect); + + /* Workaround braindead legacy apps that don't know how to + * fullscreen themselves properly - don't get fooled by + * windows which hide their titlebar when maximized or which are + * client decorated; that's not the same as fullscreen, even + * if there are no struts making the workarea smaller than + * the monitor. + */ + if (meta_prefs_get_force_fullscreen() && + (window->decorated && !meta_window_is_client_decorated (window)) && + meta_rectangle_equal (&rect, &monitor_rect) && + window->has_fullscreen_func && + !window->fullscreen) + { + /* + meta_topic (META_DEBUG_GEOMETRY, + */ + meta_warning ( + "Treating resize request of legacy application %s as a " + "fullscreen request\n", + window->desc); + meta_window_make_fullscreen_internal (window); + } + meta_window_move_resize_internal (window, flags, gravity, @@ -6601,7 +6658,7 @@ y, width, height); - + } /* window->user_rect exists to allow "snapping-back" the window if a * new strut is set (causing the window to move) and then the strut * is later removed without the user moving the window in the