summaryrefslogtreecommitdiff
path: root/gtk/gtktextutil.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2001-12-17 16:46:08 +0000
committerHavoc Pennington <hp@src.gnome.org>2001-12-17 16:46:08 +0000
commit8a44bc045517b37800aa5f7db40b793638f8ae9b (patch)
tree055627a83f45156be2f1e5c1ed39daa94b5e07d1 /gtk/gtktextutil.c
parent8280fa8d444246212b50b3be0c9cb0b59060fdeb (diff)
downloadgtk+-8a44bc045517b37800aa5f7db40b793638f8ae9b.tar.gz
Add Unicode control char menu, based on patch from Dov. Bug #63495
2001-12-06 Havoc Pennington <hp@redhat.com> Add Unicode control char menu, based on patch from Dov. Bug #63495 * gtk/gtkentry.c (gtk_entry_commit_cb): share code via gtk_entry_enter_text (gtk_entry_enter_text): function to do "typing in text" (popup_targets_received): add the Unicode menu items * gtk/gtktextview.c (popup_targets_received): add missing mnemonic on Input Methods item, and add the unicode menu items. * gtk/gtktextutil.h, gtk/gtktextutil.c: private utilities to be used in GtkEntry and GtkTextView - may become public later.
Diffstat (limited to 'gtk/gtktextutil.c')
-rw-r--r--gtk/gtktextutil.c117
1 files changed, 117 insertions, 0 deletions
diff --git a/gtk/gtktextutil.c b/gtk/gtktextutil.c
new file mode 100644
index 0000000000..7a53fab676
--- /dev/null
+++ b/gtk/gtktextutil.c
@@ -0,0 +1,117 @@
+/* GTK - The GIMP Toolkit
+ * 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, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GTK+ Team and others 1997-2001. See the AUTHORS
+ * file for a list of people on the GTK+ Team. See the ChangeLog
+ * files for a list of changes. These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#include "gtktextutil.h"
+#include "gtkintl.h"
+#include "gtkmenuitem.h"
+
+typedef struct _GtkUnicodeMenuEntry GtkUnicodeMenuEntry;
+typedef struct _GtkTextUtilCallbackInfo GtkTextUtilCallbackInfo;
+
+struct _GtkUnicodeMenuEntry {
+ const char *label;
+ gunichar ch;
+};
+
+struct _GtkTextUtilCallbackInfo
+{
+ GtkTextUtilCharChosenFunc func;
+ gpointer data;
+};
+
+GtkUnicodeMenuEntry bidi_menu_entries[] = {
+ { N_("LRM _Left-to-right mark"), 0x200E },
+ { N_("RLM _Right-to-left mark"), 0x200F },
+ { N_("LRE Left-to-right _embedding"), 0x202A },
+ { N_("RLE Right-to-left e_mbedding"), 0x202B },
+ { N_("LRO Left-to-right _override"), 0x202D },
+ { N_("RLO Right-to-left o_verride"), 0x202E },
+ { N_("PDF _Pop directional formatting"), 0x202C },
+ { N_("ZWS _Zero width space"), 0x200B },
+ { N_("ZWN Zero width _joiner"), 0x200D },
+ { N_("ZWNJ Zero width _non-joiner"), 0x200C }
+};
+
+static void
+activate_cb (GtkWidget *menu_item,
+ gpointer data)
+{
+ GtkUnicodeMenuEntry *entry;
+ GtkTextUtilCallbackInfo *info = data;
+ char buf[7];
+
+ entry = g_object_get_data (G_OBJECT (menu_item), "gtk-unicode-menu-entry");
+
+ buf[g_unichar_to_utf8 (entry->ch, buf)] = '\0';
+
+ (* info->func) (buf, info->data);
+}
+
+/**
+ * _gtk_text_util_append_special_char_menuitems
+ * @menushell: a #GtkMenuShell
+ * @callback: call this when an item is chosen
+ * @data: data for callback
+ *
+ * Add menuitems for various bidi control characters to a menu;
+ * the menuitems, when selected, will call the given function
+ * with the chosen character.
+ *
+ * This function is private/internal in GTK 2.0, the functionality may
+ * become public sometime, but it probably needs more thought first.
+ * e.g. maybe there should be a way to just get the list of items,
+ * instead of requiring the menu items to be created.
+ **/
+void
+_gtk_text_util_append_special_char_menuitems (GtkMenuShell *menushell,
+ GtkTextUtilCharChosenFunc func,
+ gpointer data)
+{
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (bidi_menu_entries); i++)
+ {
+ GtkWidget *menuitem;
+ GtkTextUtilCallbackInfo *info;
+
+ /* wasteful to have a bunch of copies, but simplifies mem management */
+ info = g_new (GtkTextUtilCallbackInfo, 1);
+ info->func = func;
+ info->data = data;
+
+ menuitem = gtk_menu_item_new_with_mnemonic (bidi_menu_entries[i].label);
+ g_object_set_data (G_OBJECT (menuitem), "gtk-unicode-menu-entry",
+ &bidi_menu_entries[i]);
+
+ g_signal_connect_data (G_OBJECT (menuitem), "activate",
+ G_CALLBACK (activate_cb),
+ info, (GClosureNotify) g_free, 0);
+
+ gtk_widget_show (menuitem);
+ gtk_menu_shell_append (menushell, menuitem);
+ }
+}
+