[gtk/wip/chergert/quartz4u: 3/3] macos: begin porting GtkIMContextQuartz to GDK_WINDOWING_MACOS
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/quartz4u: 3/3] macos: begin porting GtkIMContextQuartz to GDK_WINDOWING_MACOS
- Date: Wed, 22 Jul 2020 01:27:45 +0000 (UTC)
commit 625436aa1ebf8e50bcbeb0d599b0bf0406d004d7
Author: Christian Hergert <chergert redhat com>
Date: Tue Jul 21 18:30:27 2020 -0700
macos: begin porting GtkIMContextQuartz to GDK_WINDOWING_MACOS
This still needs some more work to translate NSEvent data and access it
from the imcontext implementation.
gtk/gtkimcontextquartz.c | 142 ++++++++++++++++++++++++++---------------------
1 file changed, 79 insertions(+), 63 deletions(-)
---
diff --git a/gtk/gtkimcontextquartz.c b/gtk/gtkimcontextquartz.c
index c56c998ea7..7e7440f5ac 100644
--- a/gtk/gtkimcontextquartz.c
+++ b/gtk/gtkimcontextquartz.c
@@ -21,17 +21,19 @@
#include "config.h"
#include <string.h>
-#include "gtk/gtkimcontextquartz.h"
-#include "gtk/gtkintl.h"
-#include "gtk/gtkimmoduleprivate.h"
+#include "gtkimcontextquartz.h"
+#include "gtkimmoduleprivate.h"
+#include "gtkintl.h"
-#include "gdk/quartz/gdkquartz.h"
-#include "gdk/quartz/GdkQuartzView.h"
+#include "gdk/macos/gdkmacos.h"
+#include "gdk/macos/gdkmacossurface-private.h"
+#include "gdk/macos/GdkMacosBaseView.h"
-#define GTK_IM_CONTEXT_TYPE_QUARTZ (type_quartz)
-#define GTK_IM_CONTEXT_QUARTZ(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_IM_CONTEXT_TYPE_QUARTZ,
GtkIMContextQuartz))
+#define GTK_IM_CONTEXT_TYPE_QUARTZ (gtk_im_context_quartz_get_type())
+#define GTK_IM_CONTEXT_QUARTZ(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_IM_CONTEXT_TYPE_QUARTZ,
GtkIMContextQuartz))
#define GTK_IM_CONTEXT_QUARTZ_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_IM_CONTEXT_TYPE_QUARTZ,
GtkIMContextQuartzClass))
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
typedef struct _GtkIMContextQuartz
{
@@ -51,21 +53,21 @@ typedef struct _GtkIMContextQuartzClass
} GtkIMContextQuartzClass;
G_DEFINE_TYPE_WITH_CODE (GtkIMContextQuartz, gtk_im_context_quartz, GTK_TYPE_IM_CONTEXT,
- gtk_im_module_ensure_extension_point ();
+ gtk_im_module_ensure_extension_point ();
g_io_extension_point_implement (GTK_IM_MODULE_EXTENSION_POINT_NAME,
g_define_type_id,
"quartz",
0))
static void
-quartz_get_preedit_string (GtkIMContext *context,
- gchar **str,
+quartz_get_preedit_string (GtkIMContext *context,
+ gchar **str,
PangoAttrList **attrs,
- gint *cursor_pos)
+ gint *cursor_pos)
{
GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
- GTK_NOTE (MISC, g_print ("quartz_get_preedit_string\n"));
+ GDK_NOTE (MISC, g_print ("quartz_get_preedit_string\n"));
if (str)
*str = qc->preedit_str ? g_strdup (qc->preedit_str) : g_strdup ("");
@@ -85,7 +87,7 @@ quartz_get_preedit_string (GtkIMContext *context,
ch = g_utf8_next_char (ch);
if (i >= qc->cursor_index &&
- i < qc->cursor_index + qc->selected_len)
+ i < qc->cursor_index + qc->selected_len)
attr = pango_attr_underline_new (PANGO_UNDERLINE_DOUBLE);
else
attr = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE);
@@ -110,7 +112,7 @@ quartz_get_preedit_string (GtkIMContext *context,
static gboolean
output_result (GtkIMContext *context,
- GdkSurface *surface)
+ GdkSurface *surface)
{
GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
gboolean retval = FALSE;
@@ -120,7 +122,7 @@ output_result (GtkIMContext *context,
marked_str = g_strdup (g_object_get_data (G_OBJECT (surface), TIC_MARKED_TEXT));
if (fixed_str)
{
- GTK_NOTE (MISC, g_print ("tic-insert-text: %s\n", fixed_str));
+ GDK_NOTE (MISC, g_print ("tic-insert-text: %s\n", fixed_str));
g_free (qc->preedit_str);
qc->preedit_str = NULL;
g_object_set_data (G_OBJECT (surface), TIC_INSERT_TEXT, NULL);
@@ -128,9 +130,9 @@ output_result (GtkIMContext *context,
g_signal_emit_by_name (context, "preedit_changed");
unsigned int filtered =
- GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (surface),
- GIC_FILTER_KEY));
- GTK_NOTE (MISC, g_print ("filtered, %d\n", filtered));
+ GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (surface),
+ GIC_FILTER_KEY));
+ GDK_NOTE (MISC, g_print ("filtered, %d\n", filtered));
if (filtered)
retval = TRUE;
else
@@ -138,13 +140,13 @@ output_result (GtkIMContext *context,
}
if (marked_str)
{
- GTK_NOTE (MISC, g_print ("tic-marked-text: %s\n", marked_str));
+ GDK_NOTE (MISC, g_print ("tic-marked-text: %s\n", marked_str));
qc->cursor_index =
- GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (surface),
- TIC_SELECTED_POS));
+ GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (surface),
+ TIC_SELECTED_POS));
qc->selected_len =
- GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (surface),
- TIC_SELECTED_LEN));
+ GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (surface),
+ TIC_SELECTED_LEN));
g_free (qc->preedit_str);
qc->preedit_str = g_strdup (marked_str);
g_object_set_data (G_OBJECT (surface), TIC_MARKED_TEXT, NULL);
@@ -168,25 +170,28 @@ quartz_filter_keypress (GtkIMContext *context,
GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
gboolean retval;
NSView *nsview;
- GdkSurface *surface;
- GTK_NOTE (MISC, g_print ("quartz_filter_keypress\n"));
+ GDK_NOTE (MISC, g_print ("quartz_filter_keypress\n"));
- if (!GDK_IS_QUARTZ_SURFACE (qc->client_surface))
+ if (!GDK_IS_MACOS_SURFACE (qc->client_surface))
return FALSE;
- nsview = gdk_quartz_surface_get_nsview (qc->client_surface);
- surface = (GdkSurface *)[ (GdkQuartzView *)nsview gdkSurface];
- GTK_NOTE (MISC, g_print ("client_surface: %p, win: %p, nsview: %p\n",
- qc->client_surface, surface, nsview));
+ nsview = _gdk_macos_surface_get_view (GDK_MACOS_SURFACE (qc->client_surface));
+ GDK_NOTE (MISC, g_print ("client_surface: %p, win: %p, nsview: %p\n",
+ qc->client_surface, qc->client_surface, nsview));
+#if 0
NSEvent *nsevent = gdk_quartz_event_get_nsevent ((GdkEvent *)event);
+#else
+ /* TODO: Fix this to get actual NSEvent */
+ NSEvent *nsevent = nil;
+#endif
if (!nsevent)
{
if (event->hardware_keycode == 0 && event->keyval == 0xffffff)
/* update text input changes by mouse events */
- return output_result (context, surface);
+ return output_result (context, qc->client_surface);
else
return gtk_im_context_filter_keypress (qc->helper, event);
}
@@ -194,24 +199,26 @@ quartz_filter_keypress (GtkIMContext *context,
if (event->type == GDK_KEY_RELEASE)
return FALSE;
- if (event->hardware_keycode == 55) /* Command */
+ if (event->hardware_keycode == 55) /* Command */
return FALSE;
NSEventType etype = [nsevent type];
- if (etype == NSKeyDown)
+ if (etype == NSEventTypeKeyDown)
{
- g_object_set_data (G_OBJECT (surface), TIC_IN_KEY_DOWN,
- GUINT_TO_POINTER (TRUE));
- [nsview keyDown: nsevent];
+ g_object_set_data (G_OBJECT (qc->client_surface),
+ TIC_IN_KEY_DOWN,
+ GUINT_TO_POINTER (TRUE));
+ [nsview keyDown: nsevent];
}
/* JIS_Eisu || JIS_Kana */
if (event->hardware_keycode == 102 || event->hardware_keycode == 104)
return FALSE;
- retval = output_result(context, surface);
- g_object_set_data (G_OBJECT (surface), TIC_IN_KEY_DOWN,
- GUINT_TO_POINTER (FALSE));
- GTK_NOTE (MISC, g_print ("quartz_filter_keypress done\n"));
+ retval = output_result(context, qc->client_surface);
+ g_object_set_data (G_OBJECT (qc->client_surface),
+ TIC_IN_KEY_DOWN,
+ GUINT_TO_POINTER (FALSE));
+ GDK_NOTE (MISC, g_print ("quartz_filter_keypress done\n"));
return retval;
}
@@ -224,15 +231,15 @@ discard_preedit (GtkIMContext *context)
if (!qc->client_surface)
return;
- if (!GDK_IS_QUARTZ_SURFACE (qc->client_surface))
+ if (!GDK_IS_MACOS_SURFACE (qc->client_surface))
return;
- NSView *nsview = gdk_quartz_surface_get_nsview (qc->client_surface);
+ NSView *nsview = _gdk_macos_surface_get_view (GDK_MACOS_SURFACE (qc->client_surface));
if (!nsview)
return;
/* reset any partial input for this NSView */
- [(GdkQuartzView *)nsview unmarkText];
+ [(GdkMacosBaseView *)nsview unmarkText];
NSInputManager *currentInputManager = [NSInputManager currentInputManager];
[currentInputManager markedTextAbandoned:nsview];
@@ -249,24 +256,29 @@ discard_preedit (GtkIMContext *context)
static void
quartz_reset (GtkIMContext *context)
{
- GTK_NOTE (MISC, g_print ("quartz_reset\n"));
+ GDK_NOTE (MISC, g_print ("quartz_reset\n"));
discard_preedit (context);
}
static void
-quartz_set_client_surface (GtkIMContext *context, GtkWidget *widget)
+quartz_set_client_surface (GtkIMContext *context,
+ GtkWidget *widget)
{
GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
+ GtkNative *native = gtk_widget_get_native (widget);
- GTK_NOTE (MISC, g_print ("quartz_set_client_surface: %p\n", widget));
+ GDK_NOTE (MISC, g_print ("quartz_set_client_surface: %p\n", widget));
- qc->client_surface = gtk_widget_get_parent_surface (widget);
+ if (native)
+ qc->client_surface = gtk_native_get_surface (native);
+ else
+ qc->client_surface = NULL;
}
static void
quartz_focus_in (GtkIMContext *context)
{
- GTK_NOTE (MISC, g_print ("quartz_focus_in\n"));
+ GDK_NOTE (MISC, g_print ("quartz_focus_in\n"));
GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
qc->focused = TRUE;
@@ -275,7 +287,7 @@ quartz_focus_in (GtkIMContext *context)
static void
quartz_focus_out (GtkIMContext *context)
{
- GTK_NOTE (MISC, g_print ("quartz_focus_out\n"));
+ GDK_NOTE (MISC, g_print ("quartz_focus_out\n"));
GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
qc->focused = FALSE;
@@ -285,14 +297,14 @@ quartz_focus_out (GtkIMContext *context)
}
static void
-quartz_set_cursor_location (GtkIMContext *context, GdkRectangle *area)
+quartz_set_cursor_location (GtkIMContext *context,
+ GdkRectangle *area)
{
GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
gint x, y;
NSView *nsview;
- GdkSurface *surface;
- GTK_NOTE (MISC, g_print ("quartz_set_cursor_location\n"));
+ GDK_NOTE (MISC, g_print ("quartz_set_cursor_location\n"));
if (!qc->client_surface)
return;
@@ -310,22 +322,24 @@ quartz_set_cursor_location (GtkIMContext *context, GdkRectangle *area)
qc->cursor_rect->x = area->x + x;
qc->cursor_rect->y = area->y + y;
- if (!GDK_IS_QUARTZ_SURFACE (qc->client_surface))
+ if (!GDK_IS_MACOS_SURFACE (qc->client_surface))
return;
- nsview = gdk_quartz_surface_get_nsview (qc->client_surface);
- surface = (GdkSurface *)[ (GdkQuartzView*)nsview gdkSurface];
- g_object_set_data (G_OBJECT (surface), GIC_CURSOR_RECT, qc->cursor_rect);
+ nsview = _gdk_macos_surface_get_view (GDK_MACOS_SURFACE (qc->client_surface));
+ g_object_set_data (G_OBJECT (qc->client_surface), GIC_CURSOR_RECT, qc->cursor_rect);
}
static void
-quartz_set_use_preedit (GtkIMContext *context, gboolean use_preedit)
+quartz_set_use_preedit (GtkIMContext *context,
+ gboolean use_preedit)
{
- GTK_NOTE (MISC, g_print ("quartz_set_use_preedit: %d\n", use_preedit));
+ GDK_NOTE (MISC, g_print ("quartz_set_use_preedit: %d\n", use_preedit));
}
static void
-commit_cb (GtkIMContext *context, const gchar *str, GtkIMContextQuartz *qc)
+commit_cb (GtkIMContext *context,
+ const gchar *str,
+ GtkIMContextQuartz *qc)
{
g_signal_emit_by_name (qc, "commit", str);
}
@@ -333,7 +347,7 @@ commit_cb (GtkIMContext *context, const gchar *str, GtkIMContextQuartz *qc)
static void
imquartz_finalize (GObject *obj)
{
- GTK_NOTE (MISC, g_print ("imquartz_finalize\n"));
+ GDK_NOTE (MISC, g_print ("imquartz_finalize\n"));
GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (obj);
g_free (qc->preedit_str);
@@ -344,13 +358,13 @@ imquartz_finalize (GObject *obj)
g_signal_handlers_disconnect_by_func (qc->helper, (gpointer)commit_cb, qc);
g_object_unref (qc->helper);
- gtk_im_context_quartz_parent_class->finalize (obj);
+ G_OBJECT_CLASS (gtk_im_context_quartz_parent_class)->finalize (obj);
}
static void
gtk_im_context_quartz_class_init (GtkIMContextQuartzClass *class)
{
- GTK_NOTE (MISC, g_print ("gtk_im_context_quartz_class_init\n"));
+ GDK_NOTE (MISC, g_print ("gtk_im_context_quartz_class_init\n"));
GtkIMContextClass *klass = GTK_IM_CONTEXT_CLASS (class);
GObjectClass *object_class = G_OBJECT_CLASS (class);
@@ -370,7 +384,7 @@ gtk_im_context_quartz_class_init (GtkIMContextQuartzClass *class)
static void
gtk_im_context_quartz_init (GtkIMContextQuartz *qc)
{
- GTK_NOTE (MISC, g_print ("gtk_im_context_quartz_init\n"));
+ GDK_NOTE (MISC, g_print ("gtk_im_context_quartz_init\n"));
qc->preedit_str = g_strdup ("");
qc->cursor_index = 0;
@@ -381,3 +395,5 @@ gtk_im_context_quartz_init (GtkIMContextQuartz *qc)
qc->helper = g_object_new (GTK_TYPE_IM_CONTEXT_SIMPLE, NULL);
g_signal_connect (G_OBJECT (qc->helper), "commit", G_CALLBACK (commit_cb), qc);
}
+
+G_GNUC_END_IGNORE_DEPRECATIONS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]