devilhorns pushed a commit to branch master.

commit 4ea6be012bff4604bf76a9fe63c123c71833fe9b
Author: Chris Michael <[email protected]>
Date:   Thu Aug 15 14:21:09 2013 +0100

    Remove call to ecore_evas_free (border tries to free this already).
    Fix wayland-client application moving and resizing to work again.
    
    Signed-off-by: Chris Michael <[email protected]>
---
 src/modules/wl_desktop_shell/e_mod_main.c | 49 +++++++++++++++++++++++++++----
 1 file changed, 43 insertions(+), 6 deletions(-)

diff --git a/src/modules/wl_desktop_shell/e_mod_main.c 
b/src/modules/wl_desktop_shell/e_mod_main.c
index 6570531..19e6a22 100644
--- a/src/modules/wl_desktop_shell/e_mod_main.c
+++ b/src/modules/wl_desktop_shell/e_mod_main.c
@@ -965,7 +965,6 @@ _e_wl_shell_shell_surface_unmap(E_Wayland_Surface *ews)
         evas_object_del(ews->obj);
      }
 
-   if (ews->ee) ecore_evas_free(ews->ee);
    if (ews->bd) e_object_del(E_OBJECT(ews->bd));
 
    ews->mapped = EINA_FALSE;
@@ -1505,7 +1504,8 @@ _e_wl_shell_shell_surface_cb_bd_move_end(void *data, void 
*bd)
    struct wl_pointer *ptr = NULL;
    E_Border *border = NULL;
 
-   /* FIXME: wayland move/resize with keyboard ? */return;
+   /* FIXME: wayland move/resize with keyboard ? */
+
    /* try to cast data to our surface structure */
    if (!(ews = data)) return;
 
@@ -1515,6 +1515,19 @@ _e_wl_shell_shell_surface_cb_bd_move_end(void *data, 
void *bd)
    /* try to get the pointer from this input */
    if ((ptr = _e_wl_comp->input->wl.seat.pointer))
      {
+        /* do we have a valid pointer grab ? */
+        if (!ptr->grab) return;
+
+        /* is this grab the 'move' interface ? */
+        if (ptr->grab->interface != &_e_move_grab_interface)
+          return;
+
+        /* does this shell have a valid shell surface ? */
+        if (!ews->shell_surface) return;
+
+        /* is the shell surface the same one in the grab ? */
+        if ((ptr->current) && (ptr->current != ews->wl.surface)) return;
+
         ptr->button_count--;
 
         /* send this button press to the pointer */
@@ -1531,7 +1544,7 @@ _e_wl_shell_shell_surface_cb_bd_move_end(void *data, void 
*bd)
 static void 
 _e_wl_shell_shell_surface_cb_bd_resize_update(void *data, void *bd)
 {
-   E_Wayland_Shell_Grab *grab = NULL;
+   /* E_Wayland_Shell_Grab *grab = NULL; */
    E_Wayland_Surface *ews = NULL;
    struct wl_pointer *ptr = NULL;
    E_Border *border = NULL;
@@ -1547,13 +1560,22 @@ _e_wl_shell_shell_surface_cb_bd_resize_update(void 
*data, void *bd)
      {
         Evas_Coord w = 0, h = 0;
 
-        if (!(grab = (E_Wayland_Shell_Grab *)ptr->grab)) return;
+        if (!ptr->grab) return;
+
+        if (ptr->grab->interface != &_e_resize_grab_interface)
+          return;
+
+        if (!ews->shell_surface) return;
+
+        if ((ptr->current) && (ptr->current != ews->wl.surface)) return;
+
+        /* if (!(grab = (E_Wayland_Shell_Grab *)ptr->grab)) return; */
 
         w = border->w;
         h = border->h;
 
         wl_shell_surface_send_configure(ews->shell_surface->wl.resource, 
-                                        grab->edges, w, h);
+                                        ptr->grab->edges, w, h);
      }
 }
 
@@ -1564,7 +1586,8 @@ _e_wl_shell_shell_surface_cb_bd_resize_end(void *data, 
void *bd)
    struct wl_pointer *ptr = NULL;
    E_Border *border = NULL;
 
-   /* FIXME: wayland move/resize with keyboard ? */return;
+   /* FIXME: wayland move/resize with keyboard ? */
+
    /* try to cast data to our surface structure */
    if (!(ews = data)) return;
 
@@ -1574,6 +1597,19 @@ _e_wl_shell_shell_surface_cb_bd_resize_end(void *data, 
void *bd)
    /* try to get the pointer from this input */
    if ((ptr = _e_wl_comp->input->wl.seat.pointer))
      {
+        /* do we have a valid pointer grab ? */
+        if (!ptr->grab) return;
+
+        /* is this grab the 'move' interface ? */
+        if (ptr->grab->interface != &_e_resize_grab_interface)
+          return;
+
+        /* does this shell have a valid shell surface ? */
+        if (!ews->shell_surface) return;
+
+        /* is the shell surface the same one in the grab ? */
+        if ((ptr->current) && (ptr->current != ews->wl.surface)) return;
+
         ptr->button_count--;
 
         /* send this button press to the pointer */
@@ -1823,6 +1859,7 @@ _e_wl_shell_shell_surface_cb_resize(struct wl_client 
*client EINA_UNUSED, struct
 
    /* set grab properties */
    grab->edges = edges;
+   grab->grab.edges = edges;
    grab->w = ewss->surface->geometry.w;
    grab->h = ewss->surface->geometry.h;
 

-- 

------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk

Reply via email to