diff options
author | Havoc Pennington <hp@redhat.com> | 2001-12-17 16:46:08 +0000 |
---|---|---|
committer | Havoc Pennington <hp@src.gnome.org> | 2001-12-17 16:46:08 +0000 |
commit | 8a44bc045517b37800aa5f7db40b793638f8ae9b (patch) | |
tree | 055627a83f45156be2f1e5c1ed39daa94b5e07d1 /gtk/gtktextutil.c | |
parent | 8280fa8d444246212b50b3be0c9cb0b59060fdeb (diff) | |
download | gtk+-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.c | 117 |
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); + } +} + |