Stub Mir module
This commit is contained in:
committed by
Ryan Lortie
parent
4e66cca58d
commit
6530cb95fc
@@ -33,11 +33,11 @@ MAINTAINERCLEANFILES = \
|
||||
|
||||
|
||||
## Copy .pc files to target-specific names
|
||||
gtk+-x11-3.0.pc gtk+-win32-3.0.pc gtk+-quartz-3.0.pc gtk+-broadway-3.0.pc gtk+-wayland-3.0.pc: gtk+-3.0.pc
|
||||
gtk+-x11-3.0.pc gtk+-win32-3.0.pc gtk+-quartz-3.0.pc gtk+-broadway-3.0.pc gtk+-wayland-3.0.pc gtk+-mir-3.0.pc: gtk+-3.0.pc
|
||||
rm -f $@ && \
|
||||
cp gtk+-3.0.pc $@
|
||||
|
||||
gdk-x11-3.0.pc gdk-win32-3.0.pc gdk-quartz-3.0.pc gdk-broadway-3.0.pc gdk-wayland-3.0.pc: gdk-3.0.pc
|
||||
gdk-x11-3.0.pc gdk-win32-3.0.pc gdk-quartz-3.0.pc gdk-broadway-3.0.pc gdk-wayland-3.0.pc gdk-mir-3.0.pc: gdk-3.0.pc
|
||||
rm -f $@ && \
|
||||
cp gdk-3.0.pc $@
|
||||
|
||||
|
||||
32
configure.ac
32
configure.ac
@@ -330,6 +330,10 @@ AC_ARG_ENABLE(wayland-backend,
|
||||
[AS_HELP_STRING([--enable-wayland-backend],
|
||||
[enable the wayland gdk backend])],
|
||||
[backend_set=yes])
|
||||
AC_ARG_ENABLE(mir-backend,
|
||||
[AS_HELP_STRING([--enable-mir-backend],
|
||||
[enable the Mir gdk backend])],
|
||||
[backend_set=yes])
|
||||
|
||||
if test -z "$backend_set"; then
|
||||
if test "$platform_win32" = yes; then
|
||||
@@ -337,6 +341,7 @@ if test -z "$backend_set"; then
|
||||
else
|
||||
enable_x11_backend=yes
|
||||
enable_wayland_backend=maybe
|
||||
enable_mir_backend=maybe
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -459,6 +464,30 @@ else
|
||||
AM_CONDITIONAL(USE_WAYLAND, false)
|
||||
fi
|
||||
|
||||
MIR_DEPENDENCIES="mirclient"
|
||||
if test "$enable_mir_backend" = "maybe" ; then
|
||||
PKG_CHECK_EXISTS($MIR_DEPENDENCIES, [have_mir_deps=yes], [have_mir_deps=no])
|
||||
AC_MSG_CHECKING([for MIR_DEPENDENCIES])
|
||||
if test "$have_mir_deps" = "no" ; then
|
||||
enable_mir_backend=no
|
||||
else
|
||||
enable_mir_backend=yes
|
||||
fi
|
||||
AC_MSG_RESULT($enable_mir_backend)
|
||||
fi
|
||||
|
||||
if test "$enable_mir_backend" = "yes"; then
|
||||
cairo_backends="$cairo_backends cairo"
|
||||
GDK_BACKENDS="$GDK_BACKENDS mir"
|
||||
GDK_WINDOWING="$GDK_WINDOWING
|
||||
#define GDK_WINDOWING_MIR"
|
||||
MIR_PACKAGES="$MIR_DEPENDENCIES"
|
||||
|
||||
AM_CONDITIONAL(USE_MIR, true)
|
||||
else
|
||||
AM_CONDITIONAL(USE_MIR, false)
|
||||
fi
|
||||
|
||||
# strip leading space
|
||||
GDK_BACKENDS=${GDK_BACKENDS#* }
|
||||
|
||||
@@ -1328,7 +1357,7 @@ CFLAGS="$saved_cflags"
|
||||
LDFLAGS="$saved_ldflags"
|
||||
|
||||
GDK_PACKAGES="$PANGO_PACKAGES gdk-pixbuf-2.0 >= gdk_pixbuf_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version"
|
||||
GDK_PRIVATE_PACKAGES="$GDK_GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES $cairo_backends epoxy >= epoxy_required_version"
|
||||
GDK_PRIVATE_PACKAGES="$GDK_GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES $MIR_PACKAGES $cairo_backends epoxy >= epoxy_required_version"
|
||||
if test "x$enable_x11_backend" = xyes; then
|
||||
GDK_PRIVATE_PACKAGES="$GDK_PRIVATE_PACKAGES pangoft2"
|
||||
fi
|
||||
@@ -1915,6 +1944,7 @@ gdk/win32/rc/Makefile
|
||||
gdk/win32/rc/gdk.rc
|
||||
gdk/quartz/Makefile
|
||||
gdk/wayland/Makefile
|
||||
gdk/mir/Makefile
|
||||
gdk/gdkversionmacros.h
|
||||
gtk/Makefile
|
||||
gtk/makefile.msc
|
||||
|
||||
@@ -146,6 +146,7 @@ content_files = \
|
||||
osx.sgml \
|
||||
broadway.xml \
|
||||
wayland.xml \
|
||||
mir.xml \
|
||||
question_index.sgml \
|
||||
resources.sgml \
|
||||
text_widget.sgml \
|
||||
|
||||
@@ -407,6 +407,11 @@ How to compile GTK+ itself
|
||||
<arg choice="plain">--disable-wayland-backend</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-mir-backend</arg>
|
||||
<arg choice="plain">--disable-mir-backend</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-introspection=[no/auto/yes]</arg>
|
||||
</group>
|
||||
@@ -608,8 +613,10 @@ How to compile GTK+ itself
|
||||
<systemitem>--disable-quartz-backend</systemitem>,
|
||||
<systemitem>--enable-broadway-backend</systemitem>,
|
||||
<systemitem>--disable-broadway-backend</systemitem>,
|
||||
<systemitem>--enable-wayland-backend</systemitem>, and
|
||||
<systemitem>--disable-wayland-backend</systemitem></title>
|
||||
<systemitem>--enable-wayland-backend</systemitem>,
|
||||
<systemitem>--disable-wayland-backend</systemitem>
|
||||
<systemitem>--enable-mir-backend</systemitem>, and
|
||||
<systemitem>--disable-mir-backend</systemitem></title>
|
||||
|
||||
<para>
|
||||
Enables specific backends for GDK. If none of these options
|
||||
|
||||
@@ -416,6 +416,7 @@
|
||||
<xi:include href="osx.sgml" />
|
||||
<xi:include href="broadway.xml" />
|
||||
<xi:include href="wayland.xml" />
|
||||
<xi:include href="mir.xml" />
|
||||
</part>
|
||||
|
||||
<xi:include href="glossary.xml" />
|
||||
|
||||
35
docs/reference/gtk/mir.xml
Normal file
35
docs/reference/gtk/mir.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||
]>
|
||||
<refentry id="gtk-mir">
|
||||
<refmeta>
|
||||
<refentrytitle>Using GTK+ with Mir</refentrytitle>
|
||||
<manvolnum>3</manvolnum>
|
||||
<refmiscinfo>GTK Library</refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>Using GTK+ with Mir</refname>
|
||||
<refpurpose>
|
||||
Mir-specific aspects of using GTK+
|
||||
</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1>
|
||||
<title>Using GTK+ with Mir</title>
|
||||
|
||||
<para>
|
||||
The GDK Mir backend provides support for running GTK+ applications
|
||||
under Mir based display servers. To run your application in this way,
|
||||
select the Mir backend by setting <literal>GDK_BACKEND=mir</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Currently, the Mir backend does not use any additional commandline
|
||||
options or environment variables.
|
||||
</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
@@ -491,6 +491,11 @@ nevertheless.
|
||||
<listitem><para>Selects the Wayland backend for connecting to Wayland display servers</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>mir</term>
|
||||
<listitem><para>Selects the Mir backend for connecting to Mir display servers</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
Since 3.10, this environment variable can contain a comma-separated list
|
||||
of backend names, which are tried in order. The list may also contain
|
||||
|
||||
@@ -13,7 +13,7 @@ INTROSPECTION_COMPILER_ARGS = \
|
||||
|
||||
SUBDIRS = $(GDK_BACKENDS) .
|
||||
|
||||
DIST_SUBDIRS = win32 x11 quartz broadway wayland
|
||||
DIST_SUBDIRS = win32 x11 quartz broadway wayland mir
|
||||
|
||||
CLEANFILES =
|
||||
|
||||
@@ -205,6 +205,10 @@ if USE_WAYLAND
|
||||
libgdk_3_la_LIBADD += wayland/libgdk-wayland.la
|
||||
endif
|
||||
|
||||
if USE_MIR
|
||||
libgdk_3_la_LIBADD += mir/libgdk-mir.la
|
||||
endif
|
||||
|
||||
if HAVE_INTROSPECTION
|
||||
|
||||
introspection_files = \
|
||||
|
||||
@@ -60,6 +60,10 @@
|
||||
#include "wayland/gdkprivate-wayland.h"
|
||||
#endif
|
||||
|
||||
#ifdef GDK_WINDOWING_MIR
|
||||
#include "mir/gdkmir-private.h"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* SECTION:gdkdisplaymanager
|
||||
* @Short_description: Maintains a list of all open GdkDisplays
|
||||
@@ -272,6 +276,9 @@ static GdkBackend gdk_backends[] = {
|
||||
#ifdef GDK_WINDOWING_WAYLAND
|
||||
{ "wayland", _gdk_wayland_display_open },
|
||||
#endif
|
||||
#ifdef GDK_WINDOWING_MIR
|
||||
{ "mir", _gdk_mir_display_open },
|
||||
#endif
|
||||
#ifdef GDK_WINDOWING_BROADWAY
|
||||
{ "broadway", _gdk_broadway_display_open },
|
||||
#endif
|
||||
|
||||
36
gdk/mir/Makefile.am
Normal file
36
gdk/mir/Makefile.am
Normal file
@@ -0,0 +1,36 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
libgdkincludedir = $(includedir)/gtk-3.0/gdk
|
||||
libgdkmirincludedir = $(includedir)/gtk-3.0/gdk/mir
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DG_LOG_DOMAIN=\"Gdk\" \
|
||||
-DGDK_COMPILATION \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_builddir)/gdk \
|
||||
$(GDK_HIDDEN_VISIBILITY_CFLAGS) \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GDK_DEP_CFLAGS)
|
||||
|
||||
LDADDS = $(GDK_DEP_LIBS)
|
||||
|
||||
noinst_LTLIBRARIES = \
|
||||
libgdk-mir.la
|
||||
|
||||
libgdk_mir_la_SOURCES = \
|
||||
gdkmircursor.c \
|
||||
gdkmirdevice.c \
|
||||
gdkmirdevicemanager.c \
|
||||
gdkmirdisplay.c \
|
||||
gdkmirkeymap.c \
|
||||
gdkmirscreen.c \
|
||||
gdkmirwindow.c \
|
||||
gdkmirwindowimpl.c \
|
||||
gdkmir.h
|
||||
|
||||
libgdkinclude_HEADERS = \
|
||||
gdkmir.h
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
61
gdk/mir/gdkmir-private.h
Normal file
61
gdk/mir/gdkmir-private.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright © 2014 Canonical Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __GDK_PRIVATE_MIR_H__
|
||||
#define __GDK_PRIVATE_MIR_H__
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkdisplay.h"
|
||||
#include "gdkscreen.h"
|
||||
#include "gdkdevicemanager.h"
|
||||
#include "gdkkeys.h"
|
||||
#include "gdkwindowimpl.h"
|
||||
|
||||
GdkDisplay *_gdk_mir_display_open (const gchar *display_name);
|
||||
|
||||
GdkScreen *_gdk_mir_screen_new (GdkDisplay *display);
|
||||
|
||||
GdkDeviceManager *_gdk_mir_device_manager_new (GdkDisplay *display);
|
||||
|
||||
GdkDevice *_gdk_mir_device_manager_get_keyboard (GdkDeviceManager *device_manager);
|
||||
|
||||
GdkKeymap *_gdk_mir_keymap_new (void);
|
||||
|
||||
GdkDevice *_gdk_mir_device_new (GdkDeviceManager *device_manager, const gchar *name, GdkInputSource input_source, gboolean has_cursor);
|
||||
|
||||
GdkCursor *_gdk_mir_cursor_new (GdkDisplay *display, GdkCursorType type);
|
||||
|
||||
GdkWindowImpl *_gdk_mir_window_impl_new (int width, int height);
|
||||
|
||||
#endif /* __GDK_PRIVATE_MIR_H__ */
|
||||
37
gdk/mir/gdkmir.h
Normal file
37
gdk/mir/gdkmir.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright © 2014 Canonical Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __GDK_MIR_H__
|
||||
#define __GDK_MIR_H__
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <mir_toolkit/mir_client_library.h>
|
||||
|
||||
#define GDK_TYPE_MIR_DISPLAY (gdk_mir_display_get_type ())
|
||||
#define GDK_IS_MIR_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_DISPLAY))
|
||||
|
||||
#define GDK_TYPE_MIR_WINDOW (gdk_mir_window_get_type ())
|
||||
#define GDK_IS_WINDOW_MIR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW_MIR))
|
||||
|
||||
GType gdk_mir_display_get_type (void);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
struct MirConnection *gdk_mir_display_get_mir_connection (GdkDisplay *display);
|
||||
|
||||
GType gdk_mir_window_get_type (void);
|
||||
|
||||
#endif /* __GDK_MIR_H__ */
|
||||
73
gdk/mir/gdkmircursor.c
Normal file
73
gdk/mir/gdkmircursor.c
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright © 2014 Canonical Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkcursorprivate.h"
|
||||
|
||||
#include "gdkmir.h"
|
||||
#include "gdkmir-private.h"
|
||||
|
||||
typedef struct GdkMirCursor GdkMirCursor;
|
||||
typedef struct GdkMirCursorClass GdkMirCursorClass;
|
||||
|
||||
#define GDK_TYPE_MIR_CURSOR (gdk_mir_cursor_get_type ())
|
||||
#define GDK_MIR_CURSOR(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_MIR_CURSOR, GdkMirCursor))
|
||||
#define GDK_MIR_CURSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_MIR_CURSOR, GdkMirCursorClass))
|
||||
#define GDK_IS_MIR_CURSOR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_CURSOR))
|
||||
#define GDK_IS_MIR_CURSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MIR_CURSOR))
|
||||
#define GDK_MIR_CURSOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MIR_CURSOR, GdkMirCursorClass))
|
||||
|
||||
struct GdkMirCursor
|
||||
{
|
||||
GdkCursor parent_instance;
|
||||
};
|
||||
|
||||
struct GdkMirCursorClass
|
||||
{
|
||||
GdkCursorClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GdkMirCursor, gdk_mir_cursor, GDK_TYPE_CURSOR)
|
||||
|
||||
GdkCursor *
|
||||
_gdk_mir_cursor_new (GdkDisplay *display, GdkCursorType type)
|
||||
{
|
||||
return g_object_new (GDK_TYPE_MIR_CURSOR, "display", display, "cursor-type", type, NULL);
|
||||
}
|
||||
|
||||
cairo_surface_t *
|
||||
gdk_mir_cursor_get_surface (GdkCursor *cursor,
|
||||
gdouble *x_hot,
|
||||
gdouble *y_hot)
|
||||
{
|
||||
g_printerr ("gdk_mir_cursor_get_surface\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_cursor_init (GdkMirCursor *cursor)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_cursor_class_init (GdkMirCursorClass *klass)
|
||||
{
|
||||
GdkCursorClass *cursor_class = GDK_CURSOR_CLASS (klass);
|
||||
|
||||
cursor_class->get_surface = gdk_mir_cursor_get_surface;
|
||||
}
|
||||
168
gdk/mir/gdkmirdevice.c
Normal file
168
gdk/mir/gdkmirdevice.c
Normal file
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* Copyright © 2014 Canonical Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkdeviceprivate.h"
|
||||
|
||||
typedef struct GdkMirDevice GdkMirDevice;
|
||||
typedef struct GdkMirDeviceClass GdkMirDeviceClass;
|
||||
|
||||
#define GDK_TYPE_MIR_DEVICE (gdk_mir_device_get_type ())
|
||||
#define GDK_MIR_DEVICE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_MIR_DEVICE, GdkMirDevice))
|
||||
#define GDK_MIR_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_MIR_DEVICE, GdkMirDeviceClass))
|
||||
#define GDK_IS_MIR_DEVICE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_DEVICE))
|
||||
#define GDK_IS_MIR_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MIR_DEVICE))
|
||||
#define GDK_MIR_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MIR_DEVICE, GdkMirDeviceClass))
|
||||
|
||||
struct GdkMirDevice
|
||||
{
|
||||
GdkDevice parent_instance;
|
||||
};
|
||||
|
||||
struct GdkMirDeviceClass
|
||||
{
|
||||
GdkDeviceClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GdkMirDevice, gdk_mir_device, GDK_TYPE_DEVICE)
|
||||
|
||||
GdkDevice *
|
||||
_gdk_mir_device_new (GdkDeviceManager *device_manager, const gchar *name, GdkInputSource input_source, gboolean has_cursor)
|
||||
{
|
||||
return g_object_new (GDK_TYPE_MIR_DEVICE,
|
||||
"display", gdk_device_manager_get_display (device_manager),
|
||||
"device-manager", device_manager,
|
||||
"name", name,
|
||||
"type", GDK_DEVICE_TYPE_MASTER,
|
||||
"input-source", input_source,
|
||||
"input-mode", GDK_MODE_SCREEN,
|
||||
"has-cursor", has_cursor,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_device_get_history (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
guint32 start,
|
||||
guint32 stop,
|
||||
GdkTimeCoord ***events,
|
||||
gint *n_events)
|
||||
{
|
||||
g_printerr ("gdk_mir_device_get_history\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_get_state (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
gdouble *axes,
|
||||
GdkModifierType *mask)
|
||||
{
|
||||
g_printerr ("gdk_mir_device_get_state\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_set_window_cursor (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
GdkCursor *cursor)
|
||||
{
|
||||
g_printerr ("gdk_mir_device_set_window_cursor\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_warp (GdkDevice *device,
|
||||
GdkScreen *screen,
|
||||
gdouble x,
|
||||
gdouble y)
|
||||
{
|
||||
g_printerr ("gdk_mir_device_warp\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_query_state (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
GdkWindow **root_window,
|
||||
GdkWindow **child_window,
|
||||
gdouble *root_x,
|
||||
gdouble *root_y,
|
||||
gdouble *win_x,
|
||||
gdouble *win_y,
|
||||
GdkModifierType *mask)
|
||||
{
|
||||
g_printerr ("gdk_mir_device_query_state\n");
|
||||
}
|
||||
|
||||
static GdkGrabStatus
|
||||
gdk_mir_device_grab (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
gboolean owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkWindow *confine_to,
|
||||
GdkCursor *cursor,
|
||||
guint32 time_)
|
||||
{
|
||||
g_printerr ("gdk_mir_device_grab\n");
|
||||
return GDK_GRAB_SUCCESS;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_ungrab (GdkDevice *device,
|
||||
guint32 time_)
|
||||
{
|
||||
g_printerr ("gdk_mir_device_ungrab\n");
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
gdk_mir_device_window_at_position (GdkDevice *device,
|
||||
gdouble *win_x,
|
||||
gdouble *win_y,
|
||||
GdkModifierType *mask,
|
||||
gboolean get_toplevel)
|
||||
{
|
||||
g_printerr ("gdk_mir_device_window_at_position (%f, %f)\n", *win_x, *win_y);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_select_window_events (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
GdkEventMask event_mask)
|
||||
{
|
||||
g_printerr ("gdk_mir_device_select_window_events\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_init (GdkMirDevice *device)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_class_init (GdkMirDeviceClass *klass)
|
||||
{
|
||||
GdkDeviceClass *device_class = GDK_DEVICE_CLASS (klass);
|
||||
|
||||
device_class->get_history = gdk_mir_device_get_history;
|
||||
device_class->get_state = gdk_mir_device_get_state;
|
||||
device_class->set_window_cursor = gdk_mir_device_set_window_cursor;
|
||||
device_class->warp = gdk_mir_device_warp;
|
||||
device_class->query_state = gdk_mir_device_query_state;
|
||||
device_class->grab = gdk_mir_device_grab;
|
||||
device_class->ungrab = gdk_mir_device_ungrab;
|
||||
device_class->window_at_position = gdk_mir_device_window_at_position;
|
||||
device_class->select_window_events = gdk_mir_device_select_window_events;
|
||||
}
|
||||
103
gdk/mir/gdkmirdevicemanager.c
Normal file
103
gdk/mir/gdkmirdevicemanager.c
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright © 2014 Canonical Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkdevicemanagerprivate.h"
|
||||
|
||||
#include "gdkmir.h"
|
||||
#include "gdkmir-private.h"
|
||||
|
||||
typedef struct GdkMirDeviceManager GdkMirDeviceManager;
|
||||
typedef struct GdkMirDeviceManagerClass GdkMirDeviceManagerClass;
|
||||
|
||||
#define GDK_TYPE_MIR_DEVICE_MANAGER (gdk_mir_device_manager_get_type ())
|
||||
#define GDK_MIR_DEVICE_MANAGER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_MIR_DEVICE_MANAGER, GdkMirDeviceManager))
|
||||
#define GDK_MIR_DEVICE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_MIR_DEVICE_MANAGER, GdkMirDeviceManagerClass))
|
||||
#define GDK_IS_MIR_DEVICE_MANAGER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_DEVICE_MANAGER))
|
||||
#define GDK_IS_MIR_DEVICE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MIR_DEVICE_MANAGER))
|
||||
#define GDK_MIR_DEVICE_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MIR_DEVICE_MANAGER, GdkMirDeviceManagerClass))
|
||||
|
||||
struct GdkMirDeviceManager
|
||||
{
|
||||
GdkDeviceManager parent_instance;
|
||||
|
||||
GdkDevice *pointer;
|
||||
GdkDevice *keyboard;
|
||||
};
|
||||
|
||||
struct GdkMirDeviceManagerClass
|
||||
{
|
||||
GdkDeviceManagerClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GdkMirDeviceManager, gdk_mir_device_manager, GDK_TYPE_DEVICE_MANAGER)
|
||||
|
||||
GdkDeviceManager *
|
||||
_gdk_mir_device_manager_new (GdkDisplay *display)
|
||||
{
|
||||
return g_object_new (GDK_TYPE_MIR_DEVICE_MANAGER, "display", display, NULL);
|
||||
}
|
||||
|
||||
static GList *
|
||||
gdk_mir_device_manager_list_devices (GdkDeviceManager *device_manager,
|
||||
GdkDeviceType type)
|
||||
{
|
||||
//g_printerr ("gdk_mir_device_manager_list_devices (%u)\n", type);
|
||||
GdkMirDeviceManager *dm = GDK_MIR_DEVICE_MANAGER (device_manager);
|
||||
|
||||
if (type == GDK_DEVICE_TYPE_MASTER)
|
||||
{
|
||||
GList *devices;
|
||||
|
||||
devices = g_list_append (NULL, dm->keyboard);
|
||||
devices = g_list_append (devices, dm->pointer);
|
||||
|
||||
return devices;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GdkDevice *
|
||||
gdk_mir_device_manager_get_client_pointer (GdkDeviceManager *device_manager)
|
||||
{
|
||||
//g_printerr ("gdk_mir_device_manager_get_client_pointer\n");
|
||||
return GDK_MIR_DEVICE_MANAGER (device_manager)->pointer;
|
||||
}
|
||||
|
||||
GdkDevice *
|
||||
_gdk_mir_device_manager_get_keyboard (GdkDeviceManager *device_manager)
|
||||
{
|
||||
return GDK_MIR_DEVICE_MANAGER (device_manager)->keyboard;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_manager_init (GdkMirDeviceManager *device_manager)
|
||||
{
|
||||
device_manager->keyboard = _gdk_mir_device_new (GDK_DEVICE_MANAGER (device_manager), "Mir Keyboard", GDK_SOURCE_KEYBOARD, FALSE);
|
||||
device_manager->pointer = _gdk_mir_device_new (GDK_DEVICE_MANAGER (device_manager), "Mir Pointer", GDK_SOURCE_MOUSE, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_device_manager_class_init (GdkMirDeviceManagerClass *klass)
|
||||
{
|
||||
GdkDeviceManagerClass *device_manager_class = GDK_DEVICE_MANAGER_CLASS (klass);
|
||||
|
||||
device_manager_class->list_devices = gdk_mir_device_manager_list_devices;
|
||||
device_manager_class->get_client_pointer = gdk_mir_device_manager_get_client_pointer;
|
||||
}
|
||||
550
gdk/mir/gdkmirdisplay.c
Normal file
550
gdk/mir/gdkmirdisplay.c
Normal file
@@ -0,0 +1,550 @@
|
||||
/*
|
||||
* Copyright © 2014 Canonical Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkdisplayprivate.h"
|
||||
#include "gdkinternals.h"
|
||||
|
||||
#include "gdkmir.h"
|
||||
#include "gdkmir-private.h"
|
||||
|
||||
#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_IS_MIR_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MIR_DISPLAY))
|
||||
#define GDK_MIR_DISPLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MIR_DISPLAY, GdkMirDisplayImplClass))
|
||||
|
||||
typedef struct GdkMirDisplay
|
||||
{
|
||||
GdkDisplay parent_instance;
|
||||
|
||||
/* Connection to Mir server */
|
||||
MirConnection *connection;
|
||||
|
||||
/* Serial number? */
|
||||
gulong serial;
|
||||
|
||||
/* Screen information */
|
||||
GdkScreen *screen;
|
||||
|
||||
GdkCursor *cursor;
|
||||
|
||||
GdkKeymap *keymap;
|
||||
} GdkMirDisplay;
|
||||
|
||||
typedef struct GdkMirDisplayClass
|
||||
{
|
||||
GdkDisplayClass parent_class;
|
||||
} GdkMirDisplayClass;
|
||||
|
||||
/**
|
||||
* SECTION:mir_interaction
|
||||
* @Short_description: Mir backend-specific functions
|
||||
* @Title: Mir Interaction
|
||||
*
|
||||
* The functions in this section are specific to the GDK Mir backend.
|
||||
* To use them, you need to include the <literal><gdk/gdkmir.h></literal>
|
||||
* header and use the Mir-specific pkg-config files to build your
|
||||
* application (either <literal>gdk-mir-3.0</literal> or
|
||||
* <literal>gtk+-mir-3.0</literal>).
|
||||
*
|
||||
* To make your code compile with other GDK backends, guard backend-specific
|
||||
* calls by an ifdef as follows. Since GDK may be built with multiple
|
||||
* backends, you should also check for the backend that is in use (e.g. by
|
||||
* using the GDK_IS_MIR_DISPLAY() macro).
|
||||
* |[
|
||||
* #ifdef GDK_WINDOWING_MIR
|
||||
* if (GDK_IS_MIR_DISPLAY (display))
|
||||
* {
|
||||
* /* make Mir-specific calls here */
|
||||
* }
|
||||
* else
|
||||
* #endif
|
||||
* #ifdef GDK_WINDOWING_X11
|
||||
* if (GDK_IS_X11_DISPLAY (display))
|
||||
* {
|
||||
* /* make X11-specific calls here */
|
||||
* }
|
||||
* else
|
||||
* #endif
|
||||
* g_error ("Unsupported GDK backend");
|
||||
* ]|
|
||||
*/
|
||||
|
||||
G_DEFINE_TYPE (GdkMirDisplay, gdk_mir_display, GDK_TYPE_DISPLAY)
|
||||
|
||||
GdkDisplay *
|
||||
_gdk_mir_display_open (const gchar *display_name)
|
||||
{
|
||||
MirConnection *connection;
|
||||
GdkMirDisplay *display;
|
||||
|
||||
g_printerr ("gdk_mir_display_open\n");
|
||||
|
||||
connection = mir_connect_sync (NULL, "GDK-Mir");
|
||||
if (!connection)
|
||||
return NULL;
|
||||
if (!mir_connection_is_valid (connection))
|
||||
{
|
||||
g_printerr ("Failed to connect to Mir: %s\n", mir_connection_get_error_message (connection));
|
||||
mir_connection_release (connection);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
display = g_object_new (GDK_TYPE_MIR_DISPLAY, NULL);
|
||||
|
||||
display->connection = connection;
|
||||
GDK_DISPLAY (display)->device_manager = _gdk_mir_device_manager_new (GDK_DISPLAY (display));
|
||||
display->screen = _gdk_mir_screen_new (GDK_DISPLAY (display));
|
||||
|
||||
g_signal_emit_by_name (display, "opened");
|
||||
|
||||
return GDK_DISPLAY (display);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_mir_display_get_mir_connection
|
||||
* @display: (type GdkMirDisplay): a #GdkDisplay
|
||||
*
|
||||
* Returns the #MirConnection for a #GdkDisplay
|
||||
*
|
||||
* Returns: (transfer none): a #MirConnection
|
||||
*
|
||||
* Since: 3.14
|
||||
*/
|
||||
struct MirConnection *
|
||||
gdk_mir_display_get_mir_connection (GdkDisplay *display)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_MIR_DISPLAY (display), NULL);
|
||||
return GDK_MIR_DISPLAY (display)->connection;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_dispose (GObject *object)
|
||||
{
|
||||
GdkMirDisplay *display = GDK_MIR_DISPLAY (object);
|
||||
|
||||
g_object_unref (display->screen);
|
||||
display->screen = NULL;
|
||||
|
||||
G_OBJECT_CLASS (gdk_mir_display_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_finalize (GObject *object)
|
||||
{
|
||||
GdkMirDisplay *display = GDK_MIR_DISPLAY (object);
|
||||
|
||||
mir_connection_release (display->connection);
|
||||
|
||||
G_OBJECT_CLASS (gdk_mir_display_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static const gchar *
|
||||
gdk_mir_display_get_name (GdkDisplay *display)
|
||||
{
|
||||
//g_printerr ("gdk_mir_display_get_name\n");
|
||||
return "Mir";
|
||||
}
|
||||
|
||||
static GdkScreen *
|
||||
gdk_mir_display_get_default_screen (GdkDisplay *display)
|
||||
{
|
||||
//g_printerr ("gdk_mir_display_get_default_screen\n");
|
||||
return GDK_MIR_DISPLAY (display)->screen;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_beep (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_beep\n");
|
||||
/* No system level beep... */
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_sync (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_sync\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_flush (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_flush\n");
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_has_pending (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_has_pending\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_queue_events (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_queue_events\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_make_default (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_make_default\n");
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
gdk_mir_display_get_default_group (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_get_default_group\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_supports_shapes (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_supports_shapes\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_supports_input_shapes (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_supports_input_shapes\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_supports_composite (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_supports_composite\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_supports_clipboard_persistence (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_supports_clipboard_persistence\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_supports_cursor_alpha (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_supports_cursor_alpha\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_supports_cursor_color (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_supports_cursor_color\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_supports_selection_notification (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_supports_selection_notification\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_request_selection_notification (GdkDisplay *display,
|
||||
GdkAtom selection)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_request_selection_notification\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_store_clipboard (GdkDisplay *display,
|
||||
GdkWindow *clipboard_window,
|
||||
guint32 time_,
|
||||
const GdkAtom *targets,
|
||||
gint n_targets)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_store_clipboard\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_get_default_cursor_size (GdkDisplay *display,
|
||||
guint *width,
|
||||
guint *height)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_get_default_cursor_size\n");
|
||||
*width = *height = 32; // FIXME: Random value
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_get_maximal_cursor_size (GdkDisplay *display,
|
||||
guint *width,
|
||||
guint *height)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_get_maximal_cursor_size\n");
|
||||
*width = *height = 32; // FIXME: Random value
|
||||
}
|
||||
|
||||
static GdkCursor *
|
||||
gdk_mir_display_get_cursor_for_type (GdkDisplay *display,
|
||||
GdkCursorType cursor_type)
|
||||
{
|
||||
//g_printerr ("gdk_mir_display_get_cursor_for_type (%u)\n", cursor_type);
|
||||
/* We don't support configurable cursors */
|
||||
return g_object_ref (GDK_MIR_DISPLAY (display)->cursor);
|
||||
}
|
||||
|
||||
static GdkCursor *
|
||||
gdk_mir_display_get_cursor_for_name (GdkDisplay *display,
|
||||
const gchar *name)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_get_cursor_for_name (\"%s\")\n", name);
|
||||
/* We don't support configurable cursors */
|
||||
return g_object_ref (GDK_MIR_DISPLAY (display)->cursor);
|
||||
}
|
||||
|
||||
static GdkCursor *
|
||||
gdk_mir_display_get_cursor_for_surface (GdkDisplay *display,
|
||||
cairo_surface_t *surface,
|
||||
gdouble x,
|
||||
gdouble y)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_get_cursor_for_surface (%f, %f)\n", x, y);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GList *
|
||||
gdk_mir_display_list_devices (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_list_devices\n");
|
||||
// FIXME: Should this access the device manager?
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GdkAppLaunchContext *
|
||||
gdk_mir_display_get_app_launch_context (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_get_app_launch_context\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_before_process_all_updates (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_before_process_all_updates\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_after_process_all_updates (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_after_process_all_updates\n");
|
||||
}
|
||||
|
||||
static gulong
|
||||
gdk_mir_display_get_next_serial (GdkDisplay *display)
|
||||
{
|
||||
//g_printerr ("gdk_mir_display_get_next_serial\n");
|
||||
return GDK_MIR_DISPLAY (display)->serial++;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_notify_startup_complete (GdkDisplay *display,
|
||||
const gchar *startup_id)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_notify_startup_complete\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_event_data_copy (GdkDisplay *display,
|
||||
const GdkEvent *src,
|
||||
GdkEvent *dst)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_event_data_copy\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_event_data_free (GdkDisplay *display,
|
||||
GdkEvent *event)
|
||||
{
|
||||
//g_printerr ("gdk_mir_display_event_data_free\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_create_window_impl (GdkDisplay *display,
|
||||
GdkWindow *window,
|
||||
GdkWindow *real_parent,
|
||||
GdkScreen *screen,
|
||||
GdkEventMask event_mask,
|
||||
GdkWindowAttr *attributes,
|
||||
gint attributes_mask)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_create_window_impl (%d, %d, %d, %d)\n", window->x, window->y, window->width, window->height);
|
||||
window->impl = _gdk_mir_window_impl_new (window->width, window->height);
|
||||
}
|
||||
|
||||
static GdkKeymap *
|
||||
gdk_mir_display_get_keymap (GdkDisplay *display)
|
||||
{
|
||||
//g_printerr ("gdk_mir_display_get_keymap\n");
|
||||
return GDK_MIR_DISPLAY (display)->keymap;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_push_error_trap (GdkDisplay *display)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_push_error_trap\n");
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_display_pop_error_trap (GdkDisplay *display,
|
||||
gboolean ignored)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_pop_error_trap\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
gdk_mir_display_get_selection_owner (GdkDisplay *display,
|
||||
GdkAtom selection)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_get_selection_owner\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_display_set_selection_owner (GdkDisplay *display,
|
||||
GdkWindow *owner,
|
||||
GdkAtom selection,
|
||||
guint32 time,
|
||||
gboolean send_event)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_set_selection_owner\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_send_selection_notify (GdkDisplay *display,
|
||||
GdkWindow *requestor,
|
||||
GdkAtom selection,
|
||||
GdkAtom target,
|
||||
GdkAtom property,
|
||||
guint32 time)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_send_selection_notify\n");
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_display_get_selection_property (GdkDisplay *display,
|
||||
GdkWindow *requestor,
|
||||
guchar **data,
|
||||
GdkAtom *ret_type,
|
||||
gint *ret_format)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_get_selection_property\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_convert_selection (GdkDisplay *display,
|
||||
GdkWindow *requestor,
|
||||
GdkAtom selection,
|
||||
GdkAtom target,
|
||||
guint32 time)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_convert_selection\n");
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_display_text_property_to_utf8_list (GdkDisplay *display,
|
||||
GdkAtom encoding,
|
||||
gint format,
|
||||
const guchar *text,
|
||||
gint length,
|
||||
gchar ***list)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_text_property_to_utf8_list\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gdk_mir_display_utf8_to_string_target (GdkDisplay *display,
|
||||
const gchar *str)
|
||||
{
|
||||
g_printerr ("gdk_mir_display_utf8_to_string_target\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_init (GdkMirDisplay *display)
|
||||
{
|
||||
display->cursor = _gdk_mir_cursor_new (GDK_DISPLAY (display), GDK_ARROW);
|
||||
display->keymap = _gdk_mir_keymap_new ();
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_display_class_init (GdkMirDisplayClass * class)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
||||
GdkDisplayClass *display_class = GDK_DISPLAY_CLASS (class);
|
||||
|
||||
object_class->dispose = gdk_mir_display_dispose;
|
||||
object_class->finalize = gdk_mir_display_finalize;
|
||||
|
||||
display_class->window_type = gdk_mir_window_get_type ();
|
||||
|
||||
display_class->get_name = gdk_mir_display_get_name;
|
||||
display_class->get_default_screen = gdk_mir_display_get_default_screen;
|
||||
display_class->beep = gdk_mir_display_beep;
|
||||
display_class->sync = gdk_mir_display_sync;
|
||||
display_class->flush = gdk_mir_display_flush;
|
||||
display_class->has_pending = gdk_mir_display_has_pending;
|
||||
display_class->queue_events = gdk_mir_display_queue_events;
|
||||
display_class->make_default = gdk_mir_display_make_default;
|
||||
display_class->get_default_group = gdk_mir_display_get_default_group;
|
||||
display_class->supports_shapes = gdk_mir_display_supports_shapes;
|
||||
display_class->supports_input_shapes = gdk_mir_display_supports_input_shapes;
|
||||
display_class->supports_composite = gdk_mir_display_supports_composite;
|
||||
display_class->supports_clipboard_persistence = gdk_mir_display_supports_clipboard_persistence;
|
||||
display_class->supports_cursor_alpha = gdk_mir_display_supports_cursor_alpha;
|
||||
display_class->supports_cursor_color = gdk_mir_display_supports_cursor_color;
|
||||
display_class->supports_selection_notification = gdk_mir_display_supports_selection_notification;
|
||||
display_class->request_selection_notification = gdk_mir_display_request_selection_notification;
|
||||
display_class->store_clipboard = gdk_mir_display_store_clipboard;
|
||||
display_class->get_default_cursor_size = gdk_mir_display_get_default_cursor_size;
|
||||
display_class->get_maximal_cursor_size = gdk_mir_display_get_maximal_cursor_size;
|
||||
display_class->get_cursor_for_type = gdk_mir_display_get_cursor_for_type;
|
||||
display_class->get_cursor_for_name = gdk_mir_display_get_cursor_for_name;
|
||||
display_class->get_cursor_for_surface = gdk_mir_display_get_cursor_for_surface;
|
||||
display_class->list_devices = gdk_mir_display_list_devices;
|
||||
display_class->get_app_launch_context = gdk_mir_display_get_app_launch_context;
|
||||
display_class->before_process_all_updates = gdk_mir_display_before_process_all_updates;
|
||||
display_class->after_process_all_updates = gdk_mir_display_after_process_all_updates;
|
||||
display_class->get_next_serial = gdk_mir_display_get_next_serial;
|
||||
display_class->notify_startup_complete = gdk_mir_display_notify_startup_complete;
|
||||
display_class->event_data_copy = gdk_mir_display_event_data_copy;
|
||||
display_class->event_data_free = gdk_mir_display_event_data_free;
|
||||
display_class->create_window_impl = gdk_mir_display_create_window_impl;
|
||||
display_class->get_keymap = gdk_mir_display_get_keymap;
|
||||
display_class->push_error_trap = gdk_mir_display_push_error_trap;
|
||||
display_class->pop_error_trap = gdk_mir_display_pop_error_trap;
|
||||
display_class->get_selection_owner = gdk_mir_display_get_selection_owner;
|
||||
display_class->set_selection_owner = gdk_mir_display_set_selection_owner;
|
||||
display_class->send_selection_notify = gdk_mir_display_send_selection_notify;
|
||||
display_class->get_selection_property = gdk_mir_display_get_selection_property;
|
||||
display_class->convert_selection = gdk_mir_display_convert_selection;
|
||||
display_class->text_property_to_utf8_list = gdk_mir_display_text_property_to_utf8_list;
|
||||
display_class->utf8_to_string_target = gdk_mir_display_utf8_to_string_target;
|
||||
}
|
||||
174
gdk/mir/gdkmirkeymap.c
Normal file
174
gdk/mir/gdkmirkeymap.c
Normal file
@@ -0,0 +1,174 @@
|
||||
/*
|
||||
* Copyright © 2014 Canonical Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkkeysprivate.h"
|
||||
|
||||
typedef struct GdkMirKeymap GdkMirKeymap;
|
||||
typedef struct GdkMirKeymapClass GdkMirKeymapClass;
|
||||
|
||||
#define GDK_TYPE_MIR_KEYMAP (gdk_mir_keymap_get_type ())
|
||||
#define GDK_MIR_KEYMAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_MIR_KEYMAP, GdkMirKeymap))
|
||||
#define GDK_MIR_KEYMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_MIR_KEYMAP, GdkMirKeymapClass))
|
||||
#define GDK_IS_MIR_KEYMAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_KEYMAP))
|
||||
#define GDK_IS_MIR_KEYMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MIR_KEYMAP))
|
||||
#define GDK_MIR_KEYMAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MIR_KEYMAP, GdkMirKeymapClass))
|
||||
|
||||
struct GdkMirKeymap
|
||||
{
|
||||
GdkKeymap parent_instance;
|
||||
};
|
||||
|
||||
struct GdkMirKeymapClass
|
||||
{
|
||||
GdkKeymapClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GdkMirKeymap, gdk_mir_keymap, GDK_TYPE_KEYMAP)
|
||||
|
||||
GdkKeymap *
|
||||
_gdk_mir_keymap_new (void)
|
||||
{
|
||||
return g_object_new (GDK_TYPE_MIR_KEYMAP, NULL);
|
||||
}
|
||||
|
||||
static PangoDirection
|
||||
gdk_mir_keymap_get_direction (GdkKeymap *keymap)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_get_direction\n");
|
||||
return PANGO_DIRECTION_LTR;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_keymap_have_bidi_layouts (GdkKeymap *keymap)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_have_bidi_layouts\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_keymap_get_caps_lock_state (GdkKeymap *keymap)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_get_caps_lock_state\n");
|
||||
return FALSE; // FIXME
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_keymap_get_num_lock_state (GdkKeymap *keymap)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_get_num_lock_state\n");
|
||||
return FALSE; // FIXME
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_keymap_get_entries_for_keyval (GdkKeymap *keymap,
|
||||
guint keyval,
|
||||
GdkKeymapKey **keys,
|
||||
gint *n_keys)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_get_entries_for_keyval\n");
|
||||
return FALSE; // FIXME
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_keymap_get_entries_for_keycode (GdkKeymap *keymap,
|
||||
guint hardware_keycode,
|
||||
GdkKeymapKey **keys,
|
||||
guint **keyvals,
|
||||
gint *n_entries)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_get_entries_for_keycode\n");
|
||||
return FALSE; // FIXME
|
||||
}
|
||||
|
||||
static guint
|
||||
gdk_mir_keymap_lookup_key (GdkKeymap *keymap,
|
||||
const GdkKeymapKey *key)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_lookup_key\n");
|
||||
return 0; // FIXME
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_keymap_translate_keyboard_state (GdkKeymap *keymap,
|
||||
guint hardware_keycode,
|
||||
GdkModifierType state,
|
||||
gint group,
|
||||
guint *keyval,
|
||||
gint *effective_group,
|
||||
gint *level,
|
||||
GdkModifierType *consumed_modifiers)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_translate_keyboard_state\n");
|
||||
return FALSE; // FIXME
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_keymap_add_virtual_modifiers (GdkKeymap *keymap,
|
||||
GdkModifierType *state)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_add_virtual_modifiers\n");
|
||||
// FIXME
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_keymap_map_virtual_modifiers (GdkKeymap *keymap,
|
||||
GdkModifierType *state)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_map_virtual_modifiers\n");
|
||||
return FALSE; // FIXME
|
||||
}
|
||||
|
||||
static GdkModifierType
|
||||
gdk_mir_keymap_get_modifier_mask (GdkKeymap *keymap,
|
||||
GdkModifierIntent intent)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_get_modifier_mask\n");
|
||||
return 0; // FIXME GDK_MODIFIER_TYPE_
|
||||
}
|
||||
|
||||
static guint
|
||||
gdk_mir_keymap_get_modifier_state (GdkKeymap *keymap)
|
||||
{
|
||||
g_printerr ("gdk_mir_keymap_get_modifier_state\n");
|
||||
return 0; // FIXME
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_keymap_init (GdkMirKeymap *keymap)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_keymap_class_init (GdkMirKeymapClass *klass)
|
||||
{
|
||||
GdkKeymapClass *keymap_class = GDK_KEYMAP_CLASS (klass);
|
||||
|
||||
keymap_class->get_direction = gdk_mir_keymap_get_direction;
|
||||
keymap_class->have_bidi_layouts = gdk_mir_keymap_have_bidi_layouts;
|
||||
keymap_class->get_caps_lock_state = gdk_mir_keymap_get_caps_lock_state;
|
||||
keymap_class->get_num_lock_state = gdk_mir_keymap_get_num_lock_state;
|
||||
keymap_class->get_entries_for_keyval = gdk_mir_keymap_get_entries_for_keyval;
|
||||
keymap_class->get_entries_for_keycode = gdk_mir_keymap_get_entries_for_keycode;
|
||||
keymap_class->lookup_key = gdk_mir_keymap_lookup_key;
|
||||
keymap_class->translate_keyboard_state = gdk_mir_keymap_translate_keyboard_state;
|
||||
keymap_class->add_virtual_modifiers = gdk_mir_keymap_add_virtual_modifiers;
|
||||
keymap_class->map_virtual_modifiers = gdk_mir_keymap_map_virtual_modifiers;
|
||||
keymap_class->get_modifier_mask = gdk_mir_keymap_get_modifier_mask;
|
||||
keymap_class->get_modifier_state = gdk_mir_keymap_get_modifier_state;
|
||||
}
|
||||
561
gdk/mir/gdkmirscreen.c
Normal file
561
gdk/mir/gdkmirscreen.c
Normal file
@@ -0,0 +1,561 @@
|
||||
/*
|
||||
* Copyright © 2014 Canonical Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "gdkscreenprivate.h"
|
||||
#include "gdkdisplayprivate.h"
|
||||
#include "gdkvisualprivate.h"
|
||||
#include "gdkinternals.h"
|
||||
|
||||
#include "gdkmir.h"
|
||||
#include "gdkmir-private.h"
|
||||
|
||||
#define VISUAL_TYPE GDK_VISUAL_TRUE_COLOR
|
||||
#define VISUAL_DEPTH 32
|
||||
|
||||
typedef struct GdkMirScreen GdkMirScreen;
|
||||
typedef struct GdkMirScreenClass GdkMirScreenClass;
|
||||
|
||||
#define GDK_TYPE_MIR_SCREEN (gdk_mir_screen_get_type ())
|
||||
#define GDK_MIR_SCREEN(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_MIR_SCREEN, GdkMirScreen))
|
||||
#define GDK_MIR_SCREEN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_MIR_SCREEN, GdkMirScreenClass))
|
||||
#define GDK_IS_MIR_SCREEN(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_SCREEN))
|
||||
#define GDK_IS_MIR_SCREEN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MIR_SCREEN))
|
||||
#define GDK_MIR_SCREEN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MIR_SCREEN, GdkMirScreenClass))
|
||||
|
||||
struct GdkMirScreen
|
||||
{
|
||||
GdkScreen parent_instance;
|
||||
|
||||
/* Display this screen is running on */
|
||||
GdkDisplay *display;
|
||||
|
||||
/* Current monitor configuration */
|
||||
MirDisplayConfiguration *display_config;
|
||||
|
||||
GdkVisual *visual;
|
||||
|
||||
GdkWindow *root_window;
|
||||
};
|
||||
|
||||
struct GdkMirScreenClass
|
||||
{
|
||||
GdkScreenClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GdkMirScreen, gdk_mir_screen, GDK_TYPE_SCREEN)
|
||||
|
||||
static MirConnection *
|
||||
get_connection (GdkMirScreen *screen)
|
||||
{
|
||||
return gdk_mir_display_get_mir_connection (GDK_DISPLAY (screen->display));
|
||||
}
|
||||
|
||||
static void
|
||||
get_screen_size (MirDisplayConfiguration *config, gint *width, gint *height)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
*width = 0;
|
||||
*height = 0;
|
||||
|
||||
if (!config)
|
||||
return;
|
||||
|
||||
for (i = 0; i < config->num_outputs; i++)
|
||||
{
|
||||
MirDisplayOutput *o = &config->outputs[i];
|
||||
gint w, h;
|
||||
|
||||
if (!o->used)
|
||||
continue;
|
||||
|
||||
w = o->position_x + o->modes[o->current_mode].horizontal_resolution;
|
||||
if (w > *width)
|
||||
*width = w;
|
||||
h = o->position_y + o->modes[o->current_mode].vertical_resolution;
|
||||
if (h > *height)
|
||||
*height = h;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
update_display_config (GdkMirScreen *screen)
|
||||
{
|
||||
gdk_mir_display_get_mir_connection (GDK_DISPLAY (screen->display));
|
||||
mir_display_config_destroy (screen->display_config);
|
||||
screen->display_config = mir_connection_create_display_config (get_connection (screen));
|
||||
}
|
||||
|
||||
static void
|
||||
config_changed_cb (MirConnection *connection, void *data)
|
||||
{
|
||||
GdkMirScreen *screen = data;
|
||||
gint old_width, old_height, new_width, new_height;
|
||||
|
||||
get_screen_size (screen->display_config, &old_width, &old_height);
|
||||
update_display_config (screen);
|
||||
get_screen_size (screen->display_config, &new_width, &new_height);
|
||||
|
||||
g_signal_emit_by_name (screen, "monitors-changed");
|
||||
if (old_width > 0 && (old_width != new_width || old_height != new_height))
|
||||
g_signal_emit_by_name (screen, "size-changed");
|
||||
}
|
||||
|
||||
GdkScreen *
|
||||
_gdk_mir_screen_new (GdkDisplay *display)
|
||||
{
|
||||
GdkMirScreen *screen;
|
||||
|
||||
screen = g_object_new (GDK_TYPE_MIR_SCREEN, NULL);
|
||||
screen->display = display;
|
||||
mir_connection_set_display_config_change_callback (get_connection (screen), config_changed_cb, display);
|
||||
update_display_config (screen);
|
||||
|
||||
return GDK_SCREEN (screen);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_screen_dispose (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (gdk_mir_screen_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_screen_finalize (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (gdk_mir_screen_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static GdkDisplay *
|
||||
gdk_mir_screen_get_display (GdkScreen *screen)
|
||||
{
|
||||
//g_printerr ("gdk_mir_screen_get_display\n");
|
||||
return GDK_DISPLAY (GDK_MIR_SCREEN (screen)->display);
|
||||
}
|
||||
|
||||
static MirDisplayOutput *
|
||||
get_output (GdkScreen *screen, gint monitor_num)
|
||||
{
|
||||
MirDisplayConfiguration *config;
|
||||
uint32_t i, j;
|
||||
|
||||
config = GDK_MIR_SCREEN (screen)->display_config;
|
||||
|
||||
for (i = 0, j = 0; i < config->num_outputs; i++)
|
||||
{
|
||||
if (!config->outputs[i].used)
|
||||
continue;
|
||||
|
||||
if (j == monitor_num)
|
||||
return &config->outputs[i];
|
||||
j++;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_width (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_width\n");
|
||||
gint width, height;
|
||||
get_screen_size (GDK_MIR_SCREEN (screen)->display_config, &width, &height);
|
||||
return width;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_height (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_height\n");
|
||||
gint width, height;
|
||||
get_screen_size (GDK_MIR_SCREEN (screen)->display_config, &width, &height);
|
||||
return height;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_width_mm (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_width_mm\n");
|
||||
// FIXME: A combination of all screens?
|
||||
return get_output (screen, 0)->physical_width_mm;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_height_mm (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_height_mm\n");
|
||||
// FIXME: A combination of all screens?
|
||||
return get_output (screen, 0)->physical_height_mm;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_number (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_number\n");
|
||||
return 0; //?
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
gdk_mir_screen_get_root_window (GdkScreen *screen)
|
||||
{
|
||||
//g_printerr ("gdk_mir_screen_get_root_window\n");
|
||||
GdkMirScreen *s = GDK_MIR_SCREEN (screen);
|
||||
gint width, height;
|
||||
|
||||
if (s->root_window)
|
||||
return s->root_window;
|
||||
|
||||
get_screen_size (GDK_MIR_SCREEN (screen)->display_config, &width, &height);
|
||||
|
||||
s->root_window = _gdk_display_create_window (s->display);
|
||||
s->root_window->impl = _gdk_mir_window_impl_new (width, height);
|
||||
s->root_window->impl_window = s->root_window;
|
||||
s->root_window->visual = s->visual;
|
||||
s->root_window->window_type = GDK_WINDOW_ROOT;
|
||||
s->root_window->depth = VISUAL_DEPTH;
|
||||
s->root_window->x = 0;
|
||||
s->root_window->y = 0;
|
||||
s->root_window->abs_x = 0;
|
||||
s->root_window->abs_y = 0;
|
||||
s->root_window->width = width;
|
||||
s->root_window->height = height;
|
||||
s->root_window->viewable = TRUE;
|
||||
|
||||
return s->root_window;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_n_monitors (GdkScreen *screen)
|
||||
{
|
||||
//g_printerr ("gdk_mir_screen_get_n_monitors\n");
|
||||
MirDisplayConfiguration *config;
|
||||
uint32_t i;
|
||||
gint count = 0;
|
||||
|
||||
config = GDK_MIR_SCREEN (screen)->display_config;
|
||||
|
||||
for (i = 0; i < config->num_outputs; i++)
|
||||
if (config->outputs[i].used)
|
||||
count++;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_primary_monitor (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_primary_monitor\n");
|
||||
return 0; //?
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_monitor_width_mm (GdkScreen *screen,
|
||||
gint monitor_num)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_monitor_width_mm (%d)\n", monitor_num);
|
||||
return get_output (screen, monitor_num)->physical_width_mm;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_monitor_height_mm (GdkScreen *screen,
|
||||
gint monitor_num)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_monitor_height_mm (%d)\n", monitor_num);
|
||||
return get_output (screen, monitor_num)->physical_height_mm;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gdk_mir_screen_get_monitor_plug_name (GdkScreen *screen,
|
||||
gint monitor_num)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_monitor_plug_name (%d)\n", monitor_num);
|
||||
return NULL; //?
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_screen_get_monitor_geometry (GdkScreen *screen,
|
||||
gint monitor_num,
|
||||
GdkRectangle *dest)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_monitor_geometry (%d)\n", monitor_num);
|
||||
MirDisplayOutput *output;
|
||||
MirDisplayMode *mode;
|
||||
|
||||
output = get_output (screen, monitor_num);
|
||||
mode = &output->modes[output->current_mode];
|
||||
dest->x = output->position_x;
|
||||
dest->y = output->position_y;
|
||||
dest->width = mode->horizontal_resolution;
|
||||
dest->height = mode->vertical_resolution;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_screen_get_monitor_workarea (GdkScreen *screen,
|
||||
gint monitor_num,
|
||||
GdkRectangle *dest)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_monitor_workarea (%d)\n", monitor_num);
|
||||
// FIXME: Don't know what this is
|
||||
gdk_mir_screen_get_monitor_geometry (screen, monitor_num, dest);
|
||||
}
|
||||
|
||||
static GList *
|
||||
gdk_mir_screen_list_visuals (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_list_visuals\n");
|
||||
return g_list_append (NULL, GDK_MIR_SCREEN (screen)->visual);
|
||||
}
|
||||
|
||||
static GdkVisual *
|
||||
gdk_mir_screen_get_system_visual (GdkScreen *screen)
|
||||
{
|
||||
//g_printerr ("gdk_mir_screen_get_system_visual\n");
|
||||
return GDK_MIR_SCREEN (screen)->visual;
|
||||
}
|
||||
|
||||
static GdkVisual *
|
||||
gdk_mir_screen_get_rgba_visual (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_rgba_visual\n");
|
||||
return GDK_MIR_SCREEN (screen)->visual;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_screen_is_composited (GdkScreen *screen)
|
||||
{
|
||||
//g_printerr ("gdk_mir_screen_is_composited\n");
|
||||
/* We're always composited */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gdk_mir_screen_make_display_name (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_make_display_name\n");
|
||||
return NULL; // FIXME
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
gdk_mir_screen_get_active_window (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_active_window\n");
|
||||
return NULL; // FIXME
|
||||
}
|
||||
|
||||
static GList *
|
||||
gdk_mir_screen_get_window_stack (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_get_window_stack\n");
|
||||
return NULL; // FIXME
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_screen_broadcast_client_message (GdkScreen *screen,
|
||||
GdkEvent *event)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_broadcast_client_message\n");
|
||||
// FIXME
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_mir_screen_get_setting (GdkScreen *screen,
|
||||
const gchar *name,
|
||||
GValue *value)
|
||||
{
|
||||
//g_printerr ("gdk_mir_screen_get_setting (\"%s\")\n", name);
|
||||
|
||||
if (strcmp (name, "gtk-theme-name") == 0)
|
||||
{
|
||||
g_value_set_string (value, "Ambience");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp (name, "gtk-font-name") == 0)
|
||||
{
|
||||
g_value_set_string (value, "Ubuntu");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp (name, "gtk-enable-animations") == 0)
|
||||
{
|
||||
g_value_set_boolean (value, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp (name, "gtk-xft-dpi") == 0)
|
||||
{
|
||||
g_value_set_int (value, 96 * 1024);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp (name, "gtk-xft-antialias") == 0)
|
||||
{
|
||||
g_value_set_int (value, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp (name, "gtk-xft-hinting") == 0)
|
||||
{
|
||||
g_value_set_int (value, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp (name, "gtk-xft-hintstyle") == 0)
|
||||
{
|
||||
g_value_set_static_string (value, "hintfull");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp (name, "gtk-xft-rgba") == 0)
|
||||
{
|
||||
g_value_set_static_string (value, "rgba");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_visual_get_best_depth (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_visual_get_best_depth\n");
|
||||
return VISUAL_DEPTH;
|
||||
}
|
||||
|
||||
static GdkVisualType
|
||||
gdk_mir_screen_visual_get_best_type (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_visual_get_best_type\n");
|
||||
return VISUAL_TYPE;
|
||||
}
|
||||
|
||||
static GdkVisual*
|
||||
gdk_mir_screen_visual_get_best (GdkScreen *screen)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_visual_get_best\n");
|
||||
return GDK_MIR_SCREEN (screen)->visual;
|
||||
}
|
||||
|
||||
static GdkVisual*
|
||||
gdk_mir_screen_visual_get_best_with_depth (GdkScreen *screen,
|
||||
gint depth)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_visual_get_best_with_depth (%d)\n", depth);
|
||||
return GDK_MIR_SCREEN (screen)->visual;
|
||||
}
|
||||
|
||||
static GdkVisual*
|
||||
gdk_mir_screen_visual_get_best_with_type (GdkScreen *screen,
|
||||
GdkVisualType visual_type)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_visual_get_best_with_type (%d)\n", visual_type);
|
||||
return GDK_MIR_SCREEN (screen)->visual;
|
||||
}
|
||||
|
||||
static GdkVisual*
|
||||
gdk_mir_screen_visual_get_best_with_both (GdkScreen *screen,
|
||||
gint depth,
|
||||
GdkVisualType visual_type)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_visual_get_best_with_both\n");
|
||||
return GDK_MIR_SCREEN (screen)->visual;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_screen_query_depths (GdkScreen *screen,
|
||||
gint **depths,
|
||||
gint *count)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_query_depths\n");
|
||||
static gint supported_depths[] = { VISUAL_DEPTH };
|
||||
*depths = supported_depths;
|
||||
*count = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_screen_query_visual_types (GdkScreen *screen,
|
||||
GdkVisualType **visual_types,
|
||||
gint *count)
|
||||
{
|
||||
g_printerr ("gdk_mir_screen_query_visual_types\n");
|
||||
static GdkVisualType supported_visual_types[] = { VISUAL_TYPE };
|
||||
*visual_types = supported_visual_types;
|
||||
*count = 1;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_mir_screen_get_monitor_scale_factor (GdkScreen *screen,
|
||||
gint monitor_num)
|
||||
{
|
||||
//g_printerr ("gdk_mir_screen_get_monitor_scale_factor (%d)\n", monitor_num);
|
||||
/* Don't support monitor scaling */
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_screen_init (GdkMirScreen *screen)
|
||||
{
|
||||
screen->visual = g_object_new (GDK_TYPE_VISUAL, NULL);
|
||||
screen->visual->screen = GDK_SCREEN (screen);
|
||||
screen->visual->type = VISUAL_TYPE;
|
||||
screen->visual->depth = VISUAL_DEPTH;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_screen_class_init (GdkMirScreenClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GdkScreenClass *screen_class = GDK_SCREEN_CLASS (klass);
|
||||
|
||||
object_class->dispose = gdk_mir_screen_dispose;
|
||||
object_class->finalize = gdk_mir_screen_finalize;
|
||||
|
||||
screen_class->get_display = gdk_mir_screen_get_display;
|
||||
screen_class->get_width = gdk_mir_screen_get_width;
|
||||
screen_class->get_height = gdk_mir_screen_get_height;
|
||||
screen_class->get_width_mm = gdk_mir_screen_get_width_mm;
|
||||
screen_class->get_height_mm = gdk_mir_screen_get_height_mm;
|
||||
screen_class->get_number = gdk_mir_screen_get_number;
|
||||
screen_class->get_root_window = gdk_mir_screen_get_root_window;
|
||||
screen_class->get_n_monitors = gdk_mir_screen_get_n_monitors;
|
||||
screen_class->get_primary_monitor = gdk_mir_screen_get_primary_monitor;
|
||||
screen_class->get_monitor_width_mm = gdk_mir_screen_get_monitor_width_mm;
|
||||
screen_class->get_monitor_height_mm = gdk_mir_screen_get_monitor_height_mm;
|
||||
screen_class->get_monitor_plug_name = gdk_mir_screen_get_monitor_plug_name;
|
||||
screen_class->get_monitor_geometry = gdk_mir_screen_get_monitor_geometry;
|
||||
screen_class->get_monitor_workarea = gdk_mir_screen_get_monitor_workarea;
|
||||
screen_class->list_visuals = gdk_mir_screen_list_visuals;
|
||||
screen_class->get_system_visual = gdk_mir_screen_get_system_visual;
|
||||
screen_class->get_rgba_visual = gdk_mir_screen_get_rgba_visual;
|
||||
screen_class->is_composited = gdk_mir_screen_is_composited;
|
||||
screen_class->make_display_name = gdk_mir_screen_make_display_name;
|
||||
screen_class->get_active_window = gdk_mir_screen_get_active_window;
|
||||
screen_class->get_window_stack = gdk_mir_screen_get_window_stack;
|
||||
screen_class->broadcast_client_message = gdk_mir_screen_broadcast_client_message;
|
||||
screen_class->get_setting = gdk_mir_screen_get_setting;
|
||||
screen_class->visual_get_best_depth = gdk_mir_screen_visual_get_best_depth;
|
||||
screen_class->visual_get_best_type = gdk_mir_screen_visual_get_best_type;
|
||||
screen_class->visual_get_best = gdk_mir_screen_visual_get_best;
|
||||
screen_class->visual_get_best_with_depth = gdk_mir_screen_visual_get_best_with_depth;
|
||||
screen_class->visual_get_best_with_type = gdk_mir_screen_visual_get_best_with_type;
|
||||
screen_class->visual_get_best_with_both = gdk_mir_screen_visual_get_best_with_both;
|
||||
screen_class->query_depths = gdk_mir_screen_query_depths;
|
||||
screen_class->query_visual_types = gdk_mir_screen_query_visual_types;
|
||||
screen_class->get_monitor_scale_factor = gdk_mir_screen_get_monitor_scale_factor;
|
||||
}
|
||||
52
gdk/mir/gdkmirwindow.c
Normal file
52
gdk/mir/gdkmirwindow.c
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright © 2014 Canonical Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkinternals.h"
|
||||
|
||||
#include "gdkmir.h"
|
||||
|
||||
#define GDK_MIR_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW_MIR, GdkMirWindow))
|
||||
#define GDK_MIR_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW_MIR, GdkMirWindowClass))
|
||||
#define GDK_IS_WINDOW_MIR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW_MIR))
|
||||
#define GDK_MIR_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW_MIR, GdkMirWindowClass))
|
||||
|
||||
typedef struct _GdkMirWindow GdkMirWindow;
|
||||
typedef struct _GdkMirWindowClass GdkMirWindowClass;
|
||||
|
||||
struct _GdkMirWindow
|
||||
{
|
||||
GdkWindow parent_instance;
|
||||
};
|
||||
|
||||
struct _GdkMirWindowClass
|
||||
{
|
||||
GdkWindowClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GdkMirWindow, gdk_mir_window, GDK_TYPE_WINDOW)
|
||||
|
||||
static void
|
||||
gdk_mir_window_init (GdkMirWindow *impl)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_mir_window_class_init (GdkMirWindowClass *klass)
|
||||
{
|
||||
}
|
||||
1472
gdk/mir/gdkmirwindowimpl.c
Normal file
1472
gdk/mir/gdkmirwindowimpl.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user