[mate-window-manager] add missing build requires

leigh123linux leigh123linux at fedoraproject.org
Tue Oct 16 07:30:17 UTC 2012


commit a0d082674c0fe41b9d6c92432a93f92e5ef92f46
Author: leigh123linux <leigh123linux at googlemail.com>
Date:   Tue Oct 16 08:30:12 2012 +0100

    add missing build requires

 ...eaking-out-from-maximization-during-mouse.patch |  351 ++++++++++++++++++++
 mate-window-manager.spec                           |   84 ++++-
 2 files changed, 416 insertions(+), 19 deletions(-)
---
diff --git a/Allow-breaking-out-from-maximization-during-mouse.patch b/Allow-breaking-out-from-maximization-during-mouse.patch
new file mode 100644
index 0000000..379a9eb
--- /dev/null
+++ b/Allow-breaking-out-from-maximization-during-mouse.patch
@@ -0,0 +1,351 @@
+diff -upr marco-1.4.1-orig/src/core/display.c marco-1.4.1/src/core/display.c
+--- marco-1.4.1-orig/src/core/display.c	2012-08-21 21:42:39.000000000 +0200
++++ marco-1.4.1/src/core/display.c	2012-08-25 14:51:42.021447065 +0200
+@@ -3512,6 +3512,7 @@ meta_display_begin_grab_op (MetaDisplay
+ #endif
+   display->grab_was_cancelled = FALSE;
+   display->grab_frame_action = frame_action;
++  display->grab_resize_unmaximize = 0;
+ 
+   if (display->grab_resize_timeout_id)
+     {
+@@ -3753,11 +3754,20 @@ meta_display_end_grab_op (MetaDisplay *d
+                               display->grab_wireframe_rect.x,
+                               display->grab_wireframe_rect.y);
+           if (meta_grab_op_is_resizing (display->grab_op))
+-            meta_window_resize_with_gravity (display->grab_window,
+-                                             TRUE,
+-                                             display->grab_wireframe_rect.width,
+-                                             display->grab_wireframe_rect.height,
+-                                             meta_resize_gravity_from_grab_op (display->grab_op));
++            {
++              if (display->grab_resize_unmaximize != 0)
++                meta_window_unmaximize_with_gravity (display->grab_window,
++                                                     display->grab_resize_unmaximize,
++                                                     display->grab_wireframe_rect.width,
++                                                     display->grab_wireframe_rect.height,
++                                                     meta_resize_gravity_from_grab_op (display->grab_op));
++              else
++                meta_window_resize_with_gravity (display->grab_window,
++                                                 TRUE,
++                                                 display->grab_wireframe_rect.width,
++                                                 display->grab_wireframe_rect.height,
++                                                 meta_resize_gravity_from_grab_op (display->grab_op));
++            }
+         }
+       meta_window_calc_showing (display->grab_window);
+     }
+diff -upr marco-1.4.1-orig/src/core/display-private.h marco-1.4.1/src/core/display-private.h
+--- marco-1.4.1-orig/src/core/display-private.h	2012-08-21 21:42:39.000000000 +0200
++++ marco-1.4.1/src/core/display-private.h	2012-08-25 14:48:47.159605550 +0200
+@@ -163,6 +163,9 @@ struct _MetaDisplay {
+ 	guint       grab_wireframe_active : 1;
+ 	guint       grab_was_cancelled : 1;    /* Only used in wireframe mode */
+ 	guint       grab_frame_action : 1;
++    /* During a resize operation, the directions in which we've broken
++    * out of the initial maximization state */
++    guint       grab_resize_unmaximize : 2; /* MetaMaximizeFlags */
+ 	MetaRectangle grab_wireframe_rect;
+ 	MetaRectangle grab_wireframe_last_xor_rect;
+ 	MetaRectangle grab_initial_window_pos;
+diff -upr marco-1.4.1-orig/src/core/window.c marco-1.4.1/src/core/window.c
+--- marco-1.4.1-orig/src/core/window.c	2012-08-21 21:42:39.000000000 +0200
++++ marco-1.4.1/src/core/window.c	2012-08-25 15:11:22.636859026 +0200
+@@ -2666,9 +2666,11 @@ unmaximize_window_before_freeing (MetaWi
+     }
+ }
+ 
+-void
+-meta_window_unmaximize (MetaWindow        *window,
+-                        MetaMaximizeFlags  directions)
++static void
++meta_window_unmaximize_internal (MetaWindow        *window,
++                                 MetaMaximizeFlags  directions,
++                                 MetaRectangle     *desired_rect,
++                                 int                gravity)
+ {
+   /* At least one of the two directions ought to be set */
+   gboolean unmaximize_horizontally, unmaximize_vertically;
+@@ -2702,13 +2704,13 @@ meta_window_unmaximize (MetaWindow
+       meta_window_get_client_root_coords (window, &target_rect);
+       if (unmaximize_horizontally)
+         {
+-          target_rect.x     = window->saved_rect.x;
+-          target_rect.width = window->saved_rect.width;
++          target_rect.x     = desired_rect->x;
++          target_rect.width = desired_rect->width;
+         }
+       if (unmaximize_vertically)
+         {
+-          target_rect.y      = window->saved_rect.y;
+-          target_rect.height = window->saved_rect.height;
++          target_rect.y      = desired_rect->y;
++          target_rect.height = desired_rect->height;
+         }
+ 
+       /* Window's size hints may have changed while maximized, making
+@@ -2727,12 +2729,13 @@ meta_window_unmaximize (MetaWindow
+           window->display->grab_anchor_window_pos = target_rect;
+         }
+ 
+-      meta_window_move_resize (window,
+-                               FALSE,
+-                               target_rect.x,
+-                               target_rect.y,
+-                               target_rect.width,
+-                               target_rect.height);
++      meta_window_move_resize_internal (window,
++                                        META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION,
++                                        gravity,
++                                        target_rect.x,
++                                        target_rect.y,
++                                        target_rect.width,
++                                        target_rect.height);
+ 
+       /* Make sure user_rect is current.
+        */
+@@ -2749,6 +2752,36 @@ meta_window_unmaximize (MetaWindow
+ }
+ 
+ void
++meta_window_unmaximize (MetaWindow        *window,
++                        MetaMaximizeFlags  directions)
++{
++  meta_window_unmaximize_internal (window, directions, &window->saved_rect,
++                                   NorthWestGravity);
++}
++
++/* Like meta_window_unmaximize(), but instead of unmaximizing to the
++ * saved position, we give the new desired size, and the gravity that
++ * determines the positioning relationship between the area occupied
++ * maximized and the new are. The arguments are similar to
++ * meta_window_resize_with_gravity().
++ */
++void
++meta_window_unmaximize_with_gravity (MetaWindow        *window,
++                                     MetaMaximizeFlags  directions,
++                                     int                new_width,
++                                     int                new_height,
++                                     int                gravity)
++{
++  MetaRectangle desired_rect;
++
++  meta_window_get_position (window, &desired_rect.x, &desired_rect.y);
++  desired_rect.width = new_width;
++  desired_rect.height = new_height;
++
++  meta_window_unmaximize_internal (window, directions, &desired_rect, gravity);
++}
++
++void
+ meta_window_make_above (MetaWindow  *window)
+ {
+   window->wm_state_above = TRUE;
+@@ -7033,6 +7066,112 @@ update_resize_timeout (gpointer data)
+   return FALSE;
+ }
+ 
++/* When resizing a maximized window by using alt-middle-drag (resizing
++ * with the grips or the menu for a maximized window is not enabled),
++ * the user can "break" out of the maximized state. This checks for
++ * that possibility. During such a break-out resize the user can also
++ * return to the previous maximization state by resizing back to near
++ * the original size.
++ */
++static MetaMaximizeFlags
++check_resize_unmaximize(MetaWindow *window,
++                        int         dx,
++                        int         dy)
++{
++  int threshold;
++  MetaMaximizeFlags new_unmaximize;
++
++#define DRAG_THRESHOLD_TO_RESIZE_THRESHOLD_FACTOR 3
++
++  threshold = meta_ui_get_drag_threshold (window->screen->ui) *
++    DRAG_THRESHOLD_TO_RESIZE_THRESHOLD_FACTOR;
++  new_unmaximize = 0;
++
++  if (window->maximized_horizontally ||
++      (window->display->grab_resize_unmaximize & META_MAXIMIZE_HORIZONTAL) != 0)
++    {
++      int x_amount;
++
++      /* We allow breaking out of maximization in either direction, to make
++       * the window larger than the monitor as well as smaller than the
++       * monitor. If we wanted to only allow resizing smaller than the
++       * monitor, we'd use - dx for NE/E/SE and dx for SW/W/NW.
++       */
++      switch (window->display->grab_op)
++        {
++        case META_GRAB_OP_RESIZING_NE:
++        case META_GRAB_OP_KEYBOARD_RESIZING_NE:
++        case META_GRAB_OP_RESIZING_E:
++        case META_GRAB_OP_KEYBOARD_RESIZING_E:
++        case META_GRAB_OP_RESIZING_SE:
++        case META_GRAB_OP_KEYBOARD_RESIZING_SE:
++        case META_GRAB_OP_RESIZING_SW:
++        case META_GRAB_OP_KEYBOARD_RESIZING_SW:
++        case META_GRAB_OP_RESIZING_W:
++        case META_GRAB_OP_KEYBOARD_RESIZING_W:
++        case META_GRAB_OP_RESIZING_NW:
++        case META_GRAB_OP_KEYBOARD_RESIZING_NW:
++          x_amount = dx < 0 ? - dx : dx;
++          break;
++        default:
++          x_amount = 0;
++          break;
++        }
++
++      if (x_amount > threshold)
++        new_unmaximize |= META_MAXIMIZE_HORIZONTAL;
++    }
++
++  if (window->maximized_vertically ||
++      (window->display->grab_resize_unmaximize & META_MAXIMIZE_VERTICAL) != 0)
++    {
++      int y_amount;
++
++      switch (window->display->grab_op)
++        {
++        case META_GRAB_OP_RESIZING_N:
++        case META_GRAB_OP_KEYBOARD_RESIZING_N:
++        case META_GRAB_OP_RESIZING_NE:
++        case META_GRAB_OP_KEYBOARD_RESIZING_NE:
++        case META_GRAB_OP_RESIZING_NW:
++        case META_GRAB_OP_KEYBOARD_RESIZING_NW:
++        case META_GRAB_OP_RESIZING_SE:
++        case META_GRAB_OP_KEYBOARD_RESIZING_SE:
++        case META_GRAB_OP_RESIZING_S:
++        case META_GRAB_OP_KEYBOARD_RESIZING_S:
++        case META_GRAB_OP_RESIZING_SW:
++        case META_GRAB_OP_KEYBOARD_RESIZING_SW:
++          y_amount = dy < 0 ? - dy : dy;
++          break;
++        default:
++          y_amount = 0;
++          break;
++        }
++
++      if (y_amount > threshold)
++        new_unmaximize |= META_MAXIMIZE_VERTICAL;
++    }
++
++  /* Marco doesn't have a full user interface for only horizontally or
++   * vertically maximized, so while only unmaximizing in the direction drags
++   * has some advantages, it will also confuse the user. So, we always
++   * unmaximize both ways if possible.
++   */
++  if (new_unmaximize != 0)
++    {
++      new_unmaximize = 0;
++
++      if (window->maximized_horizontally ||
++          (window->display->grab_resize_unmaximize & META_MAXIMIZE_HORIZONTAL) != 0)
++        new_unmaximize |= META_MAXIMIZE_HORIZONTAL;
++      if (window->maximized_vertically ||
++          (window->display->grab_resize_unmaximize & META_MAXIMIZE_VERTICAL) != 0)
++        new_unmaximize |= META_MAXIMIZE_VERTICAL;
++    }
++
++  return new_unmaximize;
++}
++
+ static void
+ update_resize (MetaWindow *window,
+                gboolean    snap,
+@@ -7045,6 +7184,7 @@ update_resize (MetaWindow *window,
+   MetaRectangle old;
+   int new_x, new_y;
+   double remaining;
++  MetaMaximizeFlags new_unmaximize;
+ 
+   window->display->grab_latest_motion_x = x;
+   window->display->grab_latest_motion_y = y;
+@@ -7233,6 +7373,8 @@ update_resize (MetaWindow *window,
+ 
+   if (window->display->grab_wireframe_active)
+     {
++      MetaRectangle root_coords;
++
+       if ((new_x + new_w <= new_x) || (new_y + new_h <= new_y))
+         return;
+ 
+@@ -7242,16 +7384,56 @@ update_resize (MetaWindow *window,
+        * wireframe, but still resize it; however, that probably
+        * confuses broken clients that have problems with opaque
+        * resize, they probably don't track their visibility.
++       *
++       * We handle the basic constraints on maximized windows here
++       * to give the user feedback.
+        */
++
++      if (window->maximized_horizontally && (new_unmaximize & META_MAXIMIZE_HORIZONTAL) == 0)
++        {
++          meta_window_get_client_root_coords (window, &root_coords);
++          new_x = root_coords.x;
++          new_w = root_coords.width;
++        }
++      if (window->maximized_vertically && (new_unmaximize & META_MAXIMIZE_VERTICAL) == 0)
++        {
++          meta_window_get_client_root_coords (window, &root_coords);
++          new_y = root_coords.y;
++          new_h = root_coords.height;
++        }
++
+       meta_window_update_wireframe (window, new_x, new_y, new_w, new_h);
+     }
+   else
+     {
+-      /* We don't need to update unless the specified width and height
+-       * are actually different from what we had before.
+-       */
+-      if (old.width != new_w || old.height != new_h)
+-        meta_window_resize_with_gravity (window, TRUE, new_w, new_h, gravity);
++      if (new_unmaximize == window->display->grab_resize_unmaximize)
++        {
++          /* We don't need to update unless the specified width and height
++           * are actually different from what we had before.
++           */
++          if (old.width != new_w || old.height != new_h)
++            {
++              if ((window->display->grab_resize_unmaximize == new_unmaximize))
++                meta_window_resize_with_gravity (window, TRUE, new_w, new_h, gravity);
++            }
++        }
++      else
++        {
++          if ((new_unmaximize & ~window->display->grab_resize_unmaximize) != 0)
++            {
++              meta_window_unmaximize_with_gravity (window,
++                                                   (new_unmaximize & ~window->display->grab_resize_unmaximize),
++                                                   new_w, new_h, gravity);
++            }
++
++          if ((window->display->grab_resize_unmaximize & ~new_unmaximize))
++            {
++              MetaRectangle saved_rect = window->saved_rect;
++              meta_window_maximize (window,
++                                    (window->display->grab_resize_unmaximize & ~new_unmaximize));
++              window->saved_rect = saved_rect;
++            }
++        }
+     }
+ 
+   /* Store the latest resize time, if we actually resized. */
+diff -upr marco-1.4.1-orig/src/core/window-private.h marco-1.4.1/src/core/window-private.h
+--- marco-1.4.1-orig/src/core/window-private.h	2012-08-21 21:42:39.000000000 +0200
++++ marco-1.4.1/src/core/window-private.h	2012-08-25 14:53:44.522736630 +0200
+@@ -412,6 +412,12 @@ void        meta_window_maximize_interna
+                                             MetaRectangle     *saved_rect);
+ void        meta_window_unmaximize         (MetaWindow        *window,
+                                             MetaMaximizeFlags  directions);
++void        meta_window_unmaximize_with_gravity (MetaWindow        *window,
++                                                 MetaMaximizeFlags  directions,
++                                                 int                new_width,
++                                                 int                new_height,
++                                                 int                gravity);
++void        meta_window_make_above         (MetaWindow  *window);
+ void        meta_window_make_above         (MetaWindow  *window);
+ void        meta_window_unmake_above       (MetaWindow  *window);
+ void        meta_window_shade              (MetaWindow  *window,
diff --git a/mate-window-manager.spec b/mate-window-manager.spec
index d6e4fa2..fe88783 100644
--- a/mate-window-manager.spec
+++ b/mate-window-manager.spec
@@ -1,18 +1,40 @@
-Name:		mate-window-manager
-Version:	1.4.1
-Release:	10%{?dist}
-Summary:	MATE Desktop window manager
-License:	LGPLv2+ and GPLv2+
-URL:		http://mate-desktop.org
+%{?filter_setup:
+%filter_from_requires /^libmarco-private.so/d;
+%filter_setup
+}
+
+
+Name:           mate-window-manager
+Version:        1.4.1
+Release:        11%{?dist}
+Summary:        MATE Desktop window manager
+License:        LGPLv2+ and GPLv2+
+URL:            http://mate-desktop.org
 # https://github.com/mate-desktop/mate-window-manager/issues/9
-Source0:	http://vicodan.fedorapeople.org/mate-window-manager-1.4.1-GIT.tar.gz
-
-BuildRequires:	desktop-file-utils gtk2-devel libcanberra-devel libsoup-devel mate-common mate-doc-utils mate-conf-devel mate-corba-devel mate-dialogs 
-Requires:	mate-desktop
-Requires:	mate-conf
-Requires(pre):	mate-conf
-Requires(post):	mate-conf
-Requires(preun):	mate-conf
+Source0:        http://vicodan.fedorapeople.org/mate-window-manager-1.4.1-GIT.tar.gz
+# https://bugzilla.gnome.org/show_bug.cgi?id=622517
+Patch0:         Allow-breaking-out-from-maximization-during-mouse.patch
+
+BuildRequires: desktop-file-utils
+BuildRequires: gtk2-devel
+BuildRequires: libcanberra-devel
+BuildRequires: libsoup-devel
+BuildRequires: mate-common
+BuildRequires: mate-doc-utils
+BuildRequires: mate-conf-devel
+BuildRequires: mate-corba-devel
+BuildRequires: mate-dialogs
+BuildRequires: libSM-devel
+BuildRequires: libICE-devel
+BuildRequires: startup-notification-devel
+
+Requires:       mate-themes
+# for /usr/share/mate-control-center/keybindings, /usr/share/mate/wm-properties
+Requires:       mate-control-center 
+
+Requires(pre):  mate-conf
+Requires(post): mate-conf
+Requires(preun): mate-conf
 
 Obsoletes: mate-window-manager-libs < 1.4.1-2
 
@@ -21,18 +43,34 @@ MATE Desktop window manager
 
 %package devel
 Summary: Development files for mate-window-manager
-Requires:	%{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
 %description devel
 Development files for mate-window-manager
 
 
 %prep
 %setup -q
+%patch0 -p1
 NOCONFIGURE=1 ./autogen.sh
 
 
 %build
 %configure --disable-static --disable-schemas-install
+
+SHOULD_HAVE_DEFINED="HAVE_SM HAVE_XINERAMA HAVE_XFREE_XINERAMA HAVE_SHAPE HAVE_RANDR HAVE_STARTUP_NOTIFICATION"
+
+for I in $SHOULD_HAVE_DEFINED; do
+  if ! grep -q "define $I" config.h; then
+    echo "$I was not defined in config.h"
+    grep "$I" config.h
+    exit 1
+  else
+    echo "$I was defined as it should have been"
+    grep "$I" config.h
+  fi
+done
+
 make %{?_smp_mflags} V=1
 
 
@@ -43,10 +81,10 @@ make install DESTDIR=%{buildroot}
 
 find %{buildroot} -name '*.la' -exec rm -vf {} ';'
 
-desktop-file-install									\
-	--remove-category="MATE"							\
-	--delete-original								\
-	--dir=%{buildroot}%{_datadir}/applications					\
+desktop-file-install                                \
+        --remove-category="MATE"                    \
+        --delete-original                           \
+        --dir=%{buildroot}%{_datadir}/applications  \
 %{buildroot}%{_datadir}/applications/marco.desktop
 
 
@@ -99,6 +137,14 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/marco.desktop
 
 
 %changelog
+* Tue Oct 16 2012 Leigh Scott <leigh123linux at googlemail.com> - 1.4.1-11
+- filter provides
+- fix build requires
+- fix reqires
+- define some defaults
+- Add patch to allow breaking out from maximization during mouse resize
+  (gnome bz 622517)
+
 * Wed Sep 26 2012 Rex Dieter <rdieter at fedoraproject.org> - 1.4.1-10
 - fix ldconfig scriptlets
 - use desktop-file-validate again


More information about the scm-commits mailing list