mir: connect to content-hub
https://bugzilla.gnome.org/show_bug.cgi?id=775732
This commit is contained in:
@ -464,7 +464,7 @@ else
|
|||||||
AM_CONDITIONAL(USE_WAYLAND, false)
|
AM_CONDITIONAL(USE_WAYLAND, false)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MIR_DEPENDENCIES="mirclient >= mirclient_required_version mircookie >= mircookie_required_version"
|
MIR_DEPENDENCIES="mirclient >= mirclient_required_version mircookie >= mircookie_required_version libcontent-hub-glib"
|
||||||
if test "$enable_mir_backend" = "maybe" ; then
|
if test "$enable_mir_backend" = "maybe" ; then
|
||||||
PKG_CHECK_EXISTS($MIR_DEPENDENCIES, [have_mir_deps=yes], [have_mir_deps=no])
|
PKG_CHECK_EXISTS($MIR_DEPENDENCIES, [have_mir_deps=yes], [have_mir_deps=no])
|
||||||
AC_MSG_CHECKING([for MIR_DEPENDENCIES])
|
AC_MSG_CHECKING([for MIR_DEPENDENCIES])
|
||||||
|
|||||||
@ -23,6 +23,8 @@
|
|||||||
#include "gdkmir.h"
|
#include "gdkmir.h"
|
||||||
#include "gdkmir-private.h"
|
#include "gdkmir-private.h"
|
||||||
|
|
||||||
|
#include <com/ubuntu/content/glib/content-hub-glib.h>
|
||||||
|
|
||||||
#define GDK_TYPE_DISPLAY_MIR (gdk_mir_display_get_type ())
|
#define GDK_TYPE_DISPLAY_MIR (gdk_mir_display_get_type ())
|
||||||
#define GDK_MIR_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DISPLAY_MIR, GdkMirDisplay))
|
#define GDK_MIR_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DISPLAY_MIR, GdkMirDisplay))
|
||||||
#define GDK_MIR_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DISPLAY_MIR, GdkMirDisplayClass))
|
#define GDK_MIR_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DISPLAY_MIR, GdkMirDisplayClass))
|
||||||
@ -57,6 +59,9 @@ typedef struct GdkMirDisplay
|
|||||||
guint have_egl_buffer_age : 1;
|
guint have_egl_buffer_age : 1;
|
||||||
guint have_egl_swap_buffers_with_damage : 1;
|
guint have_egl_swap_buffers_with_damage : 1;
|
||||||
guint have_egl_surfaceless_context : 1;
|
guint have_egl_surfaceless_context : 1;
|
||||||
|
|
||||||
|
ContentHubService *content_service;
|
||||||
|
ContentHubHandler *content_handler;
|
||||||
} GdkMirDisplay;
|
} GdkMirDisplay;
|
||||||
|
|
||||||
typedef struct GdkMirDisplayClass
|
typedef struct GdkMirDisplayClass
|
||||||
@ -108,6 +113,7 @@ _gdk_mir_display_open (const gchar *display_name)
|
|||||||
MirConnection *connection;
|
MirConnection *connection;
|
||||||
MirPixelFormat sw_pixel_format, hw_pixel_format;
|
MirPixelFormat sw_pixel_format, hw_pixel_format;
|
||||||
GdkMirDisplay *display;
|
GdkMirDisplay *display;
|
||||||
|
GDBusConnection *session;
|
||||||
|
|
||||||
//g_printerr ("gdk_mir_display_open\n");
|
//g_printerr ("gdk_mir_display_open\n");
|
||||||
|
|
||||||
@ -140,6 +146,39 @@ _gdk_mir_display_open (const gchar *display_name)
|
|||||||
display->sw_pixel_format = sw_pixel_format;
|
display->sw_pixel_format = sw_pixel_format;
|
||||||
display->hw_pixel_format = hw_pixel_format;
|
display->hw_pixel_format = hw_pixel_format;
|
||||||
|
|
||||||
|
session = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||||
|
|
||||||
|
display->content_service = content_hub_service_proxy_new_sync (
|
||||||
|
session,
|
||||||
|
G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
|
||||||
|
"com.ubuntu.content.dbus.Service",
|
||||||
|
"/",
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
display->content_handler = content_hub_handler_skeleton_new ();
|
||||||
|
|
||||||
|
g_dbus_interface_skeleton_export (
|
||||||
|
G_DBUS_INTERFACE_SKELETON (display->content_handler),
|
||||||
|
session,
|
||||||
|
"/org/gnome/gtk/content/handler",
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_object_unref (session);
|
||||||
|
|
||||||
|
content_hub_service_call_register_import_export_handler_sync (
|
||||||
|
display->content_service,
|
||||||
|
g_application_get_application_id (g_application_get_default ()),
|
||||||
|
"/org/gnome/gtk/content/handler",
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
content_hub_service_call_handler_active_sync (
|
||||||
|
display->content_service,
|
||||||
|
g_application_get_application_id (g_application_get_default ()),
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
g_signal_emit_by_name (display, "opened");
|
g_signal_emit_by_name (display, "opened");
|
||||||
|
|
||||||
return GDK_DISPLAY (display);
|
return GDK_DISPLAY (display);
|
||||||
@ -175,6 +214,9 @@ gdk_mir_display_dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
GdkMirDisplay *display = GDK_MIR_DISPLAY (object);
|
GdkMirDisplay *display = GDK_MIR_DISPLAY (object);
|
||||||
|
|
||||||
|
g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (display->content_handler));
|
||||||
|
g_clear_object (&display->content_handler);
|
||||||
|
g_clear_object (&display->content_service);
|
||||||
g_clear_object (&display->screen);
|
g_clear_object (&display->screen);
|
||||||
g_clear_object (&display->keymap);
|
g_clear_object (&display->keymap);
|
||||||
g_clear_pointer (&display->event_source, g_source_unref);
|
g_clear_pointer (&display->event_source, g_source_unref);
|
||||||
|
|||||||
Reference in New Issue
Block a user