[Pkg-deepin-devel] Bug#988193: unblock: deepin-terminal/5.0.0+ds1-3

Arun Kumar Pariyar openarungeek at gmail.com
Fri May 7 12:39:05 BST 2021


Package: release.debian.org
Severity: normal
User: release.debian.org at packages.debian.org
Usertags: unblock
X-Debbugs-Cc: pkg-deepin-devel at lists.alioth.debian.org

Please unblock package deepin-terminal

[ Reason ]
Cherry-picked patch is included that fixes FTBFS RC bug #987933 and an 
old normal
bug #894323. Also related to #986869.

[ Impact ]
As its affected by FTBFS, the package will fail to build in the new vala
related to the changes in x11 bindings.

[ Tests ]
Manual testing was done in local machine. The package built successfully 
with the
cherry-picked patch and executed fine.

[ Risks ]
Trivial, leaf package.

[ Checklist ]
     [x] all changes are documented in the d/changelog
     [x] I reviewed all changes and I approve them
     [x] attach debdiff against the package in testing

unblock deepin-terminal/5.0.0+ds1-3
-------------- next part --------------
diff -Nru deepin-terminal-5.0.0+ds1/debian/changelog deepin-terminal-5.0.0+ds1/debian/changelog
--- deepin-terminal-5.0.0+ds1/debian/changelog	2020-04-24 05:03:02.000000000 +0545
+++ deepin-terminal-5.0.0+ds1/debian/changelog	2021-05-03 00:46:19.000000000 +0545
@@ -1,3 +1,12 @@
+deepin-terminal (5.0.0+ds1-3) unstable; urgency=medium
+
+  * debian/patches:
+    + Add 0004-basic-wayland-support patch file. (Closes: #987933, #894323)
+  * debian/control:
+    + Add Arun Kumar Pariyar to uploaders list.
+
+ -- Arun Kumar Pariyar <openarungeek at gmail.com>  Mon, 03 May 2021 00:46:19 +0545
+
 deepin-terminal (5.0.0+ds1-2) unstable; urgency=high
 
   * debian/patches: Add upstream PR to fix FTBFS with new libvte
diff -Nru deepin-terminal-5.0.0+ds1/debian/control deepin-terminal-5.0.0+ds1/debian/control
--- deepin-terminal-5.0.0+ds1/debian/control	2020-04-24 05:02:41.000000000 +0545
+++ deepin-terminal-5.0.0+ds1/debian/control	2021-05-03 00:46:19.000000000 +0545
@@ -6,6 +6,7 @@
  Yangfl <mmyangfl at gmail.com>,
  Yanhao Mo <yanhaocs at gmail.com>,
  Boyuan Yang <byang at debian.org>,
+ Arun Kumar Pariyar <openarungeek at gmail.com>,
 Build-Depends:
  cmake,
  debhelper-compat (= 12),
diff -Nru deepin-terminal-5.0.0+ds1/debian/patches/0004-basic-wayland-support.patch deepin-terminal-5.0.0+ds1/debian/patches/0004-basic-wayland-support.patch
--- deepin-terminal-5.0.0+ds1/debian/patches/0004-basic-wayland-support.patch	1970-01-01 05:30:00.000000000 +0530
+++ deepin-terminal-5.0.0+ds1/debian/patches/0004-basic-wayland-support.patch	2021-05-03 00:46:19.000000000 +0545
@@ -0,0 +1,376 @@
+From: Gary Wang <wzc782970009 at gmail.com>
+Date: Sun, 12 Jan 2020 21:30:47 +0800
+Subject: [PATCH] feat: basic wayland support
+Origin: upstream, https://github.com/linuxdeepin/deepin-terminal-gtk/commit/4797cc462a803726a0001ecc2e8e5b7d10d013cd
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=987933
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=894323
+
+---
+ lib/utils.vala                |  55 ++++++++++++++---
+ lib/xutils.vala               | 113 ----------------------------------
+ widget/quake_window.vala      |  11 +---
+ widget/window.vala            |  16 ++---
+ widget/window_event_area.vala |  32 +++++-----
+ 5 files changed, 75 insertions(+), 152 deletions(-)
+ delete mode 100644 lib/xutils.vala
+
+diff --git a/lib/utils.vala b/lib/utils.vala
+index bd1b2ec5..07e3f399 100644
+--- a/lib/utils.vala
++++ b/lib/utils.vala
+@@ -3,8 +3,10 @@
+  *
+  * Copyright (C) 2011 ~ 2018 Deepin, Inc.
+  *               2011 ~ 2018 Wang Yong
++ *               2019 ~ 2020 Gary Wang
+  *
+  * Author:     Wang Yong <wangyong at deepin.com>
++ *             Gary Wang <wzc782970009 at gmail.com>
+  * Maintainer: Wang Yong <wangyong at deepin.com>
+  *
+  * This program is free software: you can redistribute it and/or modify
+@@ -186,18 +188,53 @@ namespace Utils {
+         return alloc;
+     }
+ 
+-    public bool move_window(Gtk.Widget widget, Gdk.EventButton event, Gtk.Window window) {
+-        if (is_left_button(event)) {
+-            window.begin_move_drag(
+-                (int)event.button,
+-                (int)event.x_root,
+-                (int)event.y_root,
+-                event.time);
++    public bool move_window(Gtk.Widget widget, Gdk.EventButton event) {
++        if (is_primary_button(event)) {
++            widget.get_toplevel().get_window().begin_move_drag(
++                (int) event.button, 
++                (int) event.x_root,
++                (int) event.y_root,
++                event.time
++            );
+         }
+ 
+         return false;
+     }
+ 
++    public bool resize_window(Gtk.Widget widget, Gdk.EventButton event, Gdk.CursorType cursor_type) {
++        widget.get_toplevel().get_window().begin_resize_drag(
++            cursor_type_to_window_edge(cursor_type),
++            (int) event.button, 
++            (int) event.x_root, 
++            (int) event.y_root, 
++            event.time
++        );
++
++        return true;
++    }
++
++    public Gdk.WindowEdge? cursor_type_to_window_edge(Gdk.CursorType cursor_type) {
++        if (cursor_type == Gdk.CursorType.TOP_LEFT_CORNER) {
++            return WindowEdge.NORTH_WEST;
++        } else if (cursor_type == Gdk.CursorType.TOP_SIDE) {
++            return WindowEdge.NORTH;
++        } else if (cursor_type == Gdk.CursorType.TOP_RIGHT_CORNER) {
++            return WindowEdge.NORTH_EAST;
++        } else if (cursor_type == Gdk.CursorType.RIGHT_SIDE) {
++            return WindowEdge.EAST;
++        } else if (cursor_type == Gdk.CursorType.BOTTOM_RIGHT_CORNER) {
++            return WindowEdge.SOUTH_EAST;
++        } else if (cursor_type == Gdk.CursorType.BOTTOM_SIDE) {
++            return WindowEdge.SOUTH;
++        } else if (cursor_type == Gdk.CursorType.BOTTOM_LEFT_CORNER) {
++            return WindowEdge.SOUTH_WEST;
++        } else if (cursor_type == Gdk.CursorType.LEFT_SIDE) {
++            return WindowEdge.WEST;
++        }
++
++        return null;
++    }
++
+     public void toggle_max_window(Gtk.Window window) {
+         var window_state = window.get_window().get_state();
+         if (Gdk.WindowState.MAXIMIZED in window_state) {
+@@ -207,6 +244,10 @@ namespace Utils {
+         }
+     }
+ 
++    public bool is_primary_button(Gdk.EventButton event) {
++        return event.button == Gdk.BUTTON_PRIMARY;
++    }
++
+     public bool is_left_button(Gdk.EventButton event) {
+         return event.button == 1;
+     }
+diff --git a/lib/xutils.vala b/lib/xutils.vala
+deleted file mode 100644
+index 014c28ef..00000000
+--- a/lib/xutils.vala
++++ /dev/null
+@@ -1,113 +0,0 @@
+-/* -*- Mode: Vala; indent-tabs-mode: nil; tab-width: 4 -*-
+- * -*- coding: utf-8 -*-
+- *
+- * Copyright (C) 2011 ~ 2018 Deepin, Inc.
+- *               2011 ~ 2018 Wang Yong
+- *
+- * Author:     Wang Yong <wangyong at deepin.com>
+- * Maintainer: Wang Yong <wangyong at deepin.com>
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, either version 3 of the License, or
+- * any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- */
+-
+-namespace XUtils {
+-    public static int _NET_WM_MOVERESIZE_MOVE = 8;
+-    public static int _NET_WM_MOVERESIZE_SIZE_BOTTOM = 5;
+-    public static int _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT = 6;
+-    public static int _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT = 4;
+-    public static int _NET_WM_MOVERESIZE_SIZE_LEFT = 7;
+-    public static int _NET_WM_MOVERESIZE_SIZE_RIGHT = 3;
+-    public static int _NET_WM_MOVERESIZE_SIZE_TOP = 1;
+-    public static int _NET_WM_MOVERESIZE_SIZE_TOPLEFT = 0;
+-    public static int _NET_WM_MOVERESIZE_SIZE_TOPRIGHT = 2;
+-
+-    public void seat_ungrab() {
+-        Gdk.Display gdk_display = Gdk.Display.get_default();
+-        var seat = gdk_display.get_default_seat();
+-        seat.ungrab();
+-    }
+-
+-    public void move_window(Gtk.Widget widget, int x, int y, int button) {
+-        seat_ungrab();
+-        send_message((int)((Gdk.X11.Window) widget.get_toplevel().get_window()).get_xid(),
+-                     (long) x,
+-                     (long) y,
+-                     _NET_WM_MOVERESIZE_MOVE,
+-                     button,
+-                     0  // this value must be 0, otherwise moveresize won't work.
+-                     );
+-    }
+-
+-    public void resize_window(Gtk.Widget widget, int x, int y, int button, Gdk.CursorType cursor_type) {
+-        int? action = cursor_type_to_action(cursor_type);
+-        if (action != null) {
+-            seat_ungrab();
+-            send_message((int)((Gdk.X11.Window) widget.get_toplevel().get_window()).get_xid(),
+-                         (long) x,
+-                         (long) y,
+-                         action,
+-                         button,
+-                         1
+-                         );
+-        }
+-    }
+-
+-    public int? cursor_type_to_action(Gdk.CursorType cursor_type) {
+-        if (cursor_type == Gdk.CursorType.TOP_LEFT_CORNER) {
+-            return _NET_WM_MOVERESIZE_SIZE_TOPLEFT;
+-        } else if (cursor_type == Gdk.CursorType.TOP_SIDE) {
+-            return _NET_WM_MOVERESIZE_SIZE_TOP;
+-        } else if (cursor_type == Gdk.CursorType.TOP_RIGHT_CORNER) {
+-            return _NET_WM_MOVERESIZE_SIZE_TOPRIGHT;
+-        } else if (cursor_type == Gdk.CursorType.RIGHT_SIDE) {
+-            return _NET_WM_MOVERESIZE_SIZE_RIGHT;
+-        } else if (cursor_type == Gdk.CursorType.BOTTOM_RIGHT_CORNER) {
+-            return _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT;
+-        } else if (cursor_type == Gdk.CursorType.BOTTOM_SIDE) {
+-            return _NET_WM_MOVERESIZE_SIZE_BOTTOM;
+-        } else if (cursor_type == Gdk.CursorType.BOTTOM_LEFT_CORNER) {
+-            return _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT;
+-        } else if (cursor_type == Gdk.CursorType.LEFT_SIDE) {
+-            return _NET_WM_MOVERESIZE_SIZE_LEFT;
+-        }
+-
+-        return null;
+-    }
+-
+-    public void send_message(int xid, long x, long y, int action, int button, int secret_value) {
+-        weak X.Display display = Gdk.X11.get_default_xdisplay();
+-        weak X.Window xrootwindow = display.root_window(0);
+-
+-        X.Event event = X.Event();
+-
+-        event.xclient.type = X.EventType.ClientMessage;
+-        event.xclient.message_type = Gdk.X11.get_xatom_by_name("_NET_WM_MOVERESIZE");
+-        event.xclient.display = display;
+-        event.xclient.window = xid;
+-        event.xclient.format = 32;
+-        event.xclient.data.l[0] = x;
+-        event.xclient.data.l[1] = y;
+-        event.xclient.data.l[2] = action;
+-        event.xclient.data.l[3] = button;
+-        event.xclient.data.l[4] = secret_value;
+-
+-        display.send_event(
+-            xrootwindow,
+-            false,
+-            X.EventMask.SubstructureNotifyMask | X.EventMask.SubstructureRedirectMask,
+-            ref event);
+-
+-        display.flush();
+-    }
+-}
+diff --git a/widget/quake_window.vala b/widget/quake_window.vala
+index 3e5a065c..58d2dd33 100644
+--- a/widget/quake_window.vala
++++ b/widget/quake_window.vala
+@@ -24,7 +24,6 @@
+ using Gtk;
+ using Utils;
+ using Widgets;
+-using XUtils;
+ 
+ namespace Widgets {
+     public class QuakeWindow : Widgets.ConfigWindow {
+@@ -166,10 +165,7 @@ namespace Widgets {
+                                     e.device.get_position(null, out pointer_x, out pointer_y);
+ 
+                                     if (pointer_x != press_x || pointer_y != press_y) {
+-                                        pointer_x *= get_scale_factor();
+-                                        pointer_y *= get_scale_factor();
+-                                        resize_window(this, pointer_x, pointer_y, (int) e.button, Gdk.CursorType.BOTTOM_SIDE);
+-
++                                        Utils.resize_window(this, e, cursor_type);
+                                         return false;
+                                     } else {
+                                         return true;
+@@ -191,10 +187,7 @@ namespace Widgets {
+                                 e.device.get_position(null, out pointer_x, out pointer_y);
+ 
+                                 if (pointer_x != press_x || pointer_y != press_y) {
+-                                    pointer_x *= get_scale_factor();
+-                                    pointer_y *= get_scale_factor();
+-                                    resize_window(this, pointer_x, pointer_y, (int) e.button, Gdk.CursorType.BOTTOM_SIDE);
+-
++                                    Utils.resize_window(this, e, cursor_type);
+                                     return false;
+                                 } else {
+                                     return true;
+diff --git a/widget/window.vala b/widget/window.vala
+index 65513860..ad91526a 100644
+--- a/widget/window.vala
++++ b/widget/window.vala
+@@ -3,8 +3,10 @@
+  *
+  * Copyright (C) 2011 ~ 2018 Deepin, Inc.
+  *               2011 ~ 2018 Wang Yong
++ *               2019 ~ 2020 Gary Wang
+  *
+  * Author:     Wang Yong <wangyong at deepin.com>
++ *             Gary Wang <wzc782970009 at gmail.com>
+  * Maintainer: Wang Yong <wangyong at deepin.com>
+  *
+  * This program is free software: you can redistribute it and/or modify
+@@ -26,7 +28,6 @@ using Config;
+ using Gtk;
+ using Utils;
+ using Wnck;
+-using XUtils;
+ using Widgets;
+ 
+ namespace Widgets {
+@@ -205,9 +206,7 @@ namespace Widgets {
+ 
+                             var cursor_type = get_frame_cursor_type(e.x_root, e.y_root);
+                             if (cursor_type != null) {
+-                                pointer_x *= get_scale_factor();
+-                                pointer_y *= get_scale_factor();
+-                                resize_window(this, pointer_x, pointer_y, (int) e.button, cursor_type);
++                                Utils.resize_window(this, e, cursor_type);
+                                 return true;
+                             }
+                         }
+@@ -223,9 +222,7 @@ namespace Widgets {
+ 
+                         var cursor_type = get_cursor_type(e.x_root, e.y_root);
+                         if (cursor_type != null) {
+-                            pointer_x *= get_scale_factor();
+-                            pointer_y *= get_scale_factor();
+-                            resize_window(this, pointer_x, pointer_y, (int) e.button, cursor_type);
++                            Utils.resize_window(this, e, cursor_type);
+                             return true;
+                         }
+                     }
+@@ -320,6 +317,11 @@ namespace Widgets {
+         }
+ 
+         public void update_blur_status(bool force_update=false) {
++            Gdk.Display current_display = get_window().get_display();
++            if ((current_display as Gdk.X11.Display) == null) {
++                return;
++            }
++            
+             try {
+                 int width, height;
+                 get_size(out width, out height);
+diff --git a/widget/window_event_area.vala b/widget/window_event_area.vala
+index 3693cb83..404d85e7 100644
+--- a/widget/window_event_area.vala
++++ b/widget/window_event_area.vala
+@@ -3,8 +3,10 @@
+  *
+  * Copyright (C) 2011 ~ 2018 Deepin, Inc.
+  *               2011 ~ 2018 Wang Yong
++ *               2019 ~ 2020 Gary Wang
+  *
+  * Author:     Wang Yong <wangyong at deepin.com>
++ *             Gary Wang <wzc782970009 at gmail.com>
+  * Maintainer: Wang Yong <wangyong at deepin.com>
+  *
+  * This program is free software: you can redistribute it and/or modify
+@@ -23,7 +25,6 @@
+ 
+ using Gtk;
+ using Widgets;
+-using XUtils;
+ 
+ namespace Widgets {
+     public class WindowEventArea : Gtk.EventBox {
+@@ -95,23 +96,22 @@ namespace Widgets {
+                     e.device.get_position(null, out press_x, out press_y);
+ 
+                     GLib.Timeout.add(10, () => {
+-                            // Send 'move_window' event to xserver once find user first do drag.
+-                            if (is_press) {
+-                                int pointer_x, pointer_y;
+-                                e.device.get_position(null, out pointer_x, out pointer_y);
+-
+-                                if (pointer_x != press_x || pointer_y != press_y) {
+-                                    pointer_x *= get_scale_factor();
+-                                    pointer_y *= get_scale_factor();
+-                                    move_window(this, pointer_x, pointer_y, (int) e.button);
+-                                    return false;
+-                                } else {
+-                                    return true;
+-                                }
+-                            } else {
++                        // blumia: should use begin_move_drag instead of send event to X
++                        //         so it should also works under wayland :)
++                        if (is_press) {
++                            int pointer_x, pointer_y;
++                            e.device.get_position(null, out pointer_x, out pointer_y);
++
++                            if (pointer_x != press_x || pointer_y != press_y) {
++                                Utils.move_window(this, e);
+                                 return false;
++                            } else {
++                                return true;
+                             }
+-                        });
++                        } else {
++                            return false;
++                        }
++                    });
+ 
+ 
+                     var child = get_child_at_pos(drawing_area, (int) e.x, (int) e.y);
diff -Nru deepin-terminal-5.0.0+ds1/debian/patches/series deepin-terminal-5.0.0+ds1/debian/patches/series
--- deepin-terminal-5.0.0+ds1/debian/patches/series	2020-04-24 04:58:09.000000000 +0545
+++ deepin-terminal-5.0.0+ds1/debian/patches/series	2021-05-03 00:46:19.000000000 +0545
@@ -1,3 +1,4 @@
 0001-get-rid-of-lintian-warning-desktop-entry-invalid-cat.patch
 0002-vala-libify-raw_data-conversion-for-Terminal-feed_ch.patch
 0003-utils-adjust-to-change-in-vte3-0.59.0.patch
+0004-basic-wayland-support.patch
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0x4B542AF704F74516.asc
Type: application/pgp-keys
Size: 3139 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/pkg-deepin-devel/attachments/20210507/db1980af/attachment-0001.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <http://alioth-lists.debian.net/pipermail/pkg-deepin-devel/attachments/20210507/db1980af/attachment-0001.sig>


More information about the Pkg-deepin-devel mailing list