qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/5] gtk patch queue.
@ 2015-05-08 11:48 Gerd Hoffmann
  2015-05-08 11:48 ` [Qemu-devel] [PULL 1/5] console: delayed ui_info guest notification Gerd Hoffmann
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-05-08 11:48 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

  Hi,

This brings ui_info support for gtk and some small cleanups+fixes.

please pull,
  Gerd

The following changes since commit 874e9aeeeb74c5459639a93439a502d262847e68:

  Merge remote-tracking branch 'remotes/kraxel/tags/pull-sdl-20150505-1' into staging (2015-05-05 14:06:12 +0100)

are available in the git repository at:


  git://git.kraxel.org/qemu tags/pull-gtk-20150508-1

for you to fetch changes up to 1271f7f7c60e0b0a3cc031921008a69dfd53bd34:

  gtk: update mouse position in mouse_set() (2015-05-06 08:38:05 +0200)

----------------------------------------------------------------
gtk: add ui_info support, cleanups + fixes.

----------------------------------------------------------------
Gerd Hoffmann (5):
      console: delayed ui_info guest notification
      console: add dpy_ui_info_supported
      gtk: add ui_info support
      gtk: create gtk.h
      gtk: update mouse position in mouse_set()

 include/ui/console.h |  1 +
 include/ui/gtk.h     | 76 ++++++++++++++++++++++++++++++++++++++++++
 ui/console.c         | 27 +++++++++++++--
 ui/gtk.c             | 94 +++++++++++++---------------------------------------
 4 files changed, 124 insertions(+), 74 deletions(-)
 create mode 100644 include/ui/gtk.h

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PULL 1/5] console: delayed ui_info guest notification
  2015-05-08 11:48 [Qemu-devel] [PULL 0/5] gtk patch queue Gerd Hoffmann
@ 2015-05-08 11:48 ` Gerd Hoffmann
  2015-05-08 11:48 ` [Qemu-devel] [PULL 2/5] console: add dpy_ui_info_supported Gerd Hoffmann
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-05-08 11:48 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

So we don't flood the guest with display change notifications
while the user resizes the window.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/console.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/ui/console.c b/ui/console.c
index f5295c4..248dd60 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -126,6 +126,7 @@ struct QemuConsole {
     Object *device;
     uint32_t head;
     QemuUIInfo ui_info;
+    QEMUTimer *ui_timer;
     const GraphicHwOps *hw_ops;
     void *hw;
 
@@ -1383,14 +1384,28 @@ void unregister_displaychangelistener(DisplayChangeListener *dcl)
     gui_setup_refresh(ds);
 }
 
+static void dpy_set_ui_info_timer(void *opaque)
+{
+    QemuConsole *con = opaque;
+
+    con->hw_ops->ui_info(con->hw, con->head, &con->ui_info);
+}
+
 int dpy_set_ui_info(QemuConsole *con, QemuUIInfo *info)
 {
     assert(con != NULL);
     con->ui_info = *info;
-    if (con->hw_ops->ui_info) {
-        return con->hw_ops->ui_info(con->hw, con->head, info);
+    if (!con->hw_ops->ui_info) {
+        return -1;
     }
-    return -1;
+
+    /*
+     * Typically we get a flood of these as the user resizes the window.
+     * Wait until the dust has settled (one second without updates), then
+     * go notify the guest.
+     */
+    timer_mod(con->ui_timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + 1000);
+    return 0;
 }
 
 void dpy_gfx_update(QemuConsole *con, int x, int y, int w, int h)
@@ -1724,6 +1739,7 @@ QemuConsole *graphic_console_init(DeviceState *dev, uint32_t head,
     ds = get_alloc_displaystate();
     trace_console_gfx_new();
     s = new_console(ds, GRAPHIC_CONSOLE, head);
+    s->ui_timer = timer_new_ms(QEMU_CLOCK_REALTIME, dpy_set_ui_info_timer, s);
     graphic_console_set_hwops(s, hw_ops, opaque);
     if (dev) {
         object_property_set_link(OBJECT(s), OBJECT(dev), "device",
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PULL 2/5] console: add dpy_ui_info_supported
  2015-05-08 11:48 [Qemu-devel] [PULL 0/5] gtk patch queue Gerd Hoffmann
  2015-05-08 11:48 ` [Qemu-devel] [PULL 1/5] console: delayed ui_info guest notification Gerd Hoffmann
@ 2015-05-08 11:48 ` Gerd Hoffmann
  2015-05-08 11:48 ` [Qemu-devel] [PULL 3/5] gtk: add ui_info support Gerd Hoffmann
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-05-08 11:48 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

Allow ui code to check whenever the emulated
display supports display change notifications.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h | 1 +
 ui/console.c         | 7 ++++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 0b75896..e8b3a9e 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -228,6 +228,7 @@ void update_displaychangelistener(DisplayChangeListener *dcl,
                                   uint64_t interval);
 void unregister_displaychangelistener(DisplayChangeListener *dcl);
 
+bool dpy_ui_info_supported(QemuConsole *con);
 int dpy_set_ui_info(QemuConsole *con, QemuUIInfo *info);
 
 void dpy_gfx_update(QemuConsole *con, int x, int y, int w, int h);
diff --git a/ui/console.c b/ui/console.c
index 248dd60..406c36b 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1391,11 +1391,16 @@ static void dpy_set_ui_info_timer(void *opaque)
     con->hw_ops->ui_info(con->hw, con->head, &con->ui_info);
 }
 
+bool dpy_ui_info_supported(QemuConsole *con)
+{
+    return con->hw_ops->ui_info != NULL;
+}
+
 int dpy_set_ui_info(QemuConsole *con, QemuUIInfo *info)
 {
     assert(con != NULL);
     con->ui_info = *info;
-    if (!con->hw_ops->ui_info) {
+    if (!dpy_ui_info_supported(con)) {
         return -1;
     }
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PULL 3/5] gtk: add ui_info support
  2015-05-08 11:48 [Qemu-devel] [PULL 0/5] gtk patch queue Gerd Hoffmann
  2015-05-08 11:48 ` [Qemu-devel] [PULL 1/5] console: delayed ui_info guest notification Gerd Hoffmann
  2015-05-08 11:48 ` [Qemu-devel] [PULL 2/5] console: add dpy_ui_info_supported Gerd Hoffmann
@ 2015-05-08 11:48 ` Gerd Hoffmann
  2015-05-08 11:48 ` [Qemu-devel] [PULL 4/5] gtk: create gtk.h Gerd Hoffmann
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-05-08 11:48 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

Pass new display size to the guest after window resizes.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/gtk.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/ui/gtk.c b/ui/gtk.c
index 51ea1b9..9163b43 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1478,6 +1478,19 @@ static gboolean gd_focus_out_event(GtkWidget *widget,
     return TRUE;
 }
 
+static gboolean gd_configure(GtkWidget *widget,
+                             GdkEventConfigure *cfg, gpointer opaque)
+{
+    VirtualConsole *vc = opaque;
+    QemuUIInfo info;
+
+    memset(&info, 0, sizeof(info));
+    info.width = cfg->width;
+    info.height = cfg->height;
+    dpy_set_ui_info(vc->gfx.dcl.con, &info);
+    return FALSE;
+}
+
 /** Virtual Console Callbacks **/
 
 static GSList *gd_vc_menu_init(GtkDisplayState *s, VirtualConsole *vc,
@@ -1655,6 +1668,8 @@ static void gd_connect_vc_gfx_signals(VirtualConsole *vc)
                          G_CALLBACK(gd_leave_event), vc);
         g_signal_connect(vc->gfx.drawing_area, "focus-out-event",
                          G_CALLBACK(gd_focus_out_event), vc);
+        g_signal_connect(vc->gfx.drawing_area, "configure-event",
+                         G_CALLBACK(gd_configure), vc);
     } else {
         g_signal_connect(vc->gfx.drawing_area, "key-press-event",
                          G_CALLBACK(gd_text_key_down), vc);
@@ -1772,6 +1787,10 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc,
     gd_connect_vc_gfx_signals(vc);
     group = gd_vc_menu_init(s, vc, idx, group, view_menu);
 
+    if (dpy_ui_info_supported(vc->gfx.dcl.con)) {
+        gtk_menu_item_activate(GTK_MENU_ITEM(s->zoom_fit_item));
+    }
+
     return group;
 }
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PULL 4/5] gtk: create gtk.h
  2015-05-08 11:48 [Qemu-devel] [PULL 0/5] gtk patch queue Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2015-05-08 11:48 ` [Qemu-devel] [PULL 3/5] gtk: add ui_info support Gerd Hoffmann
@ 2015-05-08 11:48 ` Gerd Hoffmann
  2015-05-08 11:48 ` [Qemu-devel] [PULL 5/5] gtk: update mouse position in mouse_set() Gerd Hoffmann
  2015-05-11 11:00 ` [Qemu-devel] [PULL 0/5] gtk patch queue Peter Maydell
  5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-05-08 11:48 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

Move various gtk bits (includes, data structures) to a header file.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/gtk.h | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ui/gtk.c         | 73 ++---------------------------------------------------
 2 files changed, 78 insertions(+), 71 deletions(-)
 create mode 100644 include/ui/gtk.h

diff --git a/include/ui/gtk.h b/include/ui/gtk.h
new file mode 100644
index 0000000..b750845
--- /dev/null
+++ b/include/ui/gtk.h
@@ -0,0 +1,76 @@
+#ifndef UI_GTK_H
+#define UI_GTK_H
+
+#ifdef _WIN32
+# define _WIN32_WINNT 0x0601 /* needed to get definition of MAPVK_VK_TO_VSC */
+#endif
+
+#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
+/* Work around an -Wstrict-prototypes warning in GTK headers */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-prototypes"
+#endif
+#include <gtk/gtk.h>
+#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
+#pragma GCC diagnostic pop
+#endif
+
+#include <gdk/gdkkeysyms.h>
+
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#include <X11/XKBlib.h>
+#endif
+
+/* Compatibility define to let us build on both Gtk2 and Gtk3 */
+#if GTK_CHECK_VERSION(3, 0, 0)
+static inline void gdk_drawable_get_size(GdkWindow *w, gint *ww, gint *wh)
+{
+    *ww = gdk_window_get_width(w);
+    *wh = gdk_window_get_height(w);
+}
+#endif
+
+typedef struct GtkDisplayState GtkDisplayState;
+
+typedef struct VirtualGfxConsole {
+    GtkWidget *drawing_area;
+    DisplayChangeListener dcl;
+    DisplaySurface *ds;
+    pixman_image_t *convert;
+    cairo_surface_t *surface;
+    double scale_x;
+    double scale_y;
+} VirtualGfxConsole;
+
+#if defined(CONFIG_VTE)
+typedef struct VirtualVteConsole {
+    GtkWidget *box;
+    GtkWidget *scrollbar;
+    GtkWidget *terminal;
+    CharDriverState *chr;
+} VirtualVteConsole;
+#endif
+
+typedef enum VirtualConsoleType {
+    GD_VC_GFX,
+    GD_VC_VTE,
+} VirtualConsoleType;
+
+typedef struct VirtualConsole {
+    GtkDisplayState *s;
+    char *label;
+    GtkWidget *window;
+    GtkWidget *menu_item;
+    GtkWidget *tab_item;
+    GtkWidget *focus;
+    VirtualConsoleType type;
+    union {
+        VirtualGfxConsole gfx;
+#if defined(CONFIG_VTE)
+        VirtualVteConsole vte;
+#endif
+    };
+} VirtualConsole;
+
+#endif /* UI_GTK_H */
diff --git a/ui/gtk.c b/ui/gtk.c
index 9163b43..8b1458f 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -34,24 +34,11 @@
 #define GETTEXT_PACKAGE "qemu"
 #define LOCALEDIR "po"
 
-#ifdef _WIN32
-# define _WIN32_WINNT 0x0601 /* needed to get definition of MAPVK_VK_TO_VSC */
-#endif
-
 #include "qemu-common.h"
 
-#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
-/* Work around an -Wstrict-prototypes warning in GTK headers */
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wstrict-prototypes"
-#endif
-#include <gtk/gtk.h>
-#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
-#pragma GCC diagnostic pop
-#endif
-
+#include "ui/console.h"
+#include "ui/gtk.h"
 
-#include <gdk/gdkkeysyms.h>
 #include <glib/gi18n.h>
 #include <locale.h>
 #if defined(CONFIG_VTE)
@@ -60,7 +47,6 @@
 #include <math.h>
 
 #include "trace.h"
-#include "ui/console.h"
 #include "ui/input.h"
 #include "sysemu/sysemu.h"
 #include "qmp-commands.h"
@@ -68,10 +54,6 @@
 #include "keymaps.h"
 #include "sysemu/char.h"
 #include "qom/object.h"
-#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h>
-#include <X11/XKBlib.h>
-#endif
 
 #define MAX_VCS 10
 #define VC_WINDOW_X_MIN  320
@@ -99,15 +81,6 @@
 # define VTE_RESIZE_HACK 1
 #endif
 
-/* Compatibility define to let us build on both Gtk2 and Gtk3 */
-#if GTK_CHECK_VERSION(3, 0, 0)
-static inline void gdk_drawable_get_size(GdkWindow *w, gint *ww, gint *wh)
-{
-    *ww = gdk_window_get_width(w);
-    *wh = gdk_window_get_height(w);
-}
-#endif
-
 #if !GTK_CHECK_VERSION(2, 20, 0)
 #define gtk_widget_get_realized(widget) GTK_WIDGET_REALIZED(widget)
 #endif
@@ -138,48 +111,6 @@ static const int modifier_keycode[] = {
     0x2a, 0x36, 0x1d, 0x9d, 0x38, 0xb8, 0xdb, 0xdd,
 };
 
-typedef struct GtkDisplayState GtkDisplayState;
-
-typedef struct VirtualGfxConsole {
-    GtkWidget *drawing_area;
-    DisplayChangeListener dcl;
-    DisplaySurface *ds;
-    pixman_image_t *convert;
-    cairo_surface_t *surface;
-    double scale_x;
-    double scale_y;
-} VirtualGfxConsole;
-
-#if defined(CONFIG_VTE)
-typedef struct VirtualVteConsole {
-    GtkWidget *box;
-    GtkWidget *scrollbar;
-    GtkWidget *terminal;
-    CharDriverState *chr;
-} VirtualVteConsole;
-#endif
-
-typedef enum VirtualConsoleType {
-    GD_VC_GFX,
-    GD_VC_VTE,
-} VirtualConsoleType;
-
-typedef struct VirtualConsole {
-    GtkDisplayState *s;
-    char *label;
-    GtkWidget *window;
-    GtkWidget *menu_item;
-    GtkWidget *tab_item;
-    GtkWidget *focus;
-    VirtualConsoleType type;
-    union {
-        VirtualGfxConsole gfx;
-#if defined(CONFIG_VTE)
-        VirtualVteConsole vte;
-#endif
-    };
-} VirtualConsole;
-
 struct GtkDisplayState {
     GtkWidget *window;
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PULL 5/5] gtk: update mouse position in mouse_set()
  2015-05-08 11:48 [Qemu-devel] [PULL 0/5] gtk patch queue Gerd Hoffmann
                   ` (3 preceding siblings ...)
  2015-05-08 11:48 ` [Qemu-devel] [PULL 4/5] gtk: create gtk.h Gerd Hoffmann
@ 2015-05-08 11:48 ` Gerd Hoffmann
  2015-05-11 11:00 ` [Qemu-devel] [PULL 0/5] gtk patch queue Peter Maydell
  5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2015-05-08 11:48 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

Without that the next mouse motion event uses the old position
as base for relative move calculation, giving wrong results and
making your mouse pointer jump around.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/gtk.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/ui/gtk.c b/ui/gtk.c
index 8b1458f..c58028f 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -463,6 +463,8 @@ static void gd_mouse_set(DisplayChangeListener *dcl,
     gdk_device_warp(gdk_device_manager_get_client_pointer(mgr),
                     gtk_widget_get_screen(vc->gfx.drawing_area),
                     x_root, y_root);
+    vc->s->last_x = x;
+    vc->s->last_y = y;
 }
 #else
 static void gd_mouse_set(DisplayChangeListener *dcl,
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PULL 0/5] gtk patch queue.
  2015-05-08 11:48 [Qemu-devel] [PULL 0/5] gtk patch queue Gerd Hoffmann
                   ` (4 preceding siblings ...)
  2015-05-08 11:48 ` [Qemu-devel] [PULL 5/5] gtk: update mouse position in mouse_set() Gerd Hoffmann
@ 2015-05-11 11:00 ` Peter Maydell
  5 siblings, 0 replies; 7+ messages in thread
From: Peter Maydell @ 2015-05-11 11:00 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: QEMU Developers

On 8 May 2015 at 12:48, Gerd Hoffmann <kraxel@redhat.com> wrote:
>   Hi,
>
> This brings ui_info support for gtk and some small cleanups+fixes.
>
> please pull,
>   Gerd
>
> The following changes since commit 874e9aeeeb74c5459639a93439a502d262847e68:
>
>   Merge remote-tracking branch 'remotes/kraxel/tags/pull-sdl-20150505-1' into staging (2015-05-05 14:06:12 +0100)
>
> are available in the git repository at:
>
>
>   git://git.kraxel.org/qemu tags/pull-gtk-20150508-1
>
> for you to fetch changes up to 1271f7f7c60e0b0a3cc031921008a69dfd53bd34:
>
>   gtk: update mouse position in mouse_set() (2015-05-06 08:38:05 +0200)
>
> ----------------------------------------------------------------
> gtk: add ui_info support, cleanups + fixes.

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-05-11 11:37 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-08 11:48 [Qemu-devel] [PULL 0/5] gtk patch queue Gerd Hoffmann
2015-05-08 11:48 ` [Qemu-devel] [PULL 1/5] console: delayed ui_info guest notification Gerd Hoffmann
2015-05-08 11:48 ` [Qemu-devel] [PULL 2/5] console: add dpy_ui_info_supported Gerd Hoffmann
2015-05-08 11:48 ` [Qemu-devel] [PULL 3/5] gtk: add ui_info support Gerd Hoffmann
2015-05-08 11:48 ` [Qemu-devel] [PULL 4/5] gtk: create gtk.h Gerd Hoffmann
2015-05-08 11:48 ` [Qemu-devel] [PULL 5/5] gtk: update mouse position in mouse_set() Gerd Hoffmann
2015-05-11 11:00 ` [Qemu-devel] [PULL 0/5] gtk patch queue Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).