diff options
author | Felipe Heidrich <fheidric> | 2002-12-16 19:19:39 +0000 |
---|---|---|
committer | Felipe Heidrich <fheidric> | 2002-12-16 19:19:39 +0000 |
commit | e1266ffa4872923c682e289b143db03a6a5e0f65 (patch) | |
tree | e291a7ebe35747144dbd16a1eb45942a31425dde /bundles/org.eclipse.swt/Eclipse SWT | |
parent | 4c6dd21317219ff610b6fd64c06fe54f983ea351 (diff) | |
download | eclipse.platform.swt-e1266ffa4872923c682e289b143db03a6a5e0f65.tar.gz eclipse.platform.swt-e1266ffa4872923c682e289b143db03a6a5e0f65.tar.xz eclipse.platform.swt-e1266ffa4872923c682e289b143db03a6a5e0f65.zip |
22759
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT')
4 files changed, 49 insertions, 5 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages.properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages.properties index 3e0d5da150..fd8b229a67 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages.properties +++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages.properties @@ -39,3 +39,4 @@ SWT_Charset_Japanese=japanese SWT_Charset_Korean=korean
SWT_Charset_Unicode=unicode
SWT_Charset_ASCII=ASCII
+SWT_InputMethods=Input Methods
\ No newline at end of file diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index b047f2ca05..b7d9cdc0b9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -1587,7 +1587,10 @@ int gtk_event_after (int widget, int event) { GdkEventButton gdkEventButton = new GdkEventButton (); OS.memmove (gdkEventButton, event, GdkEventButton.sizeof); int button = gdkEventButton.button; - if (button == 3) menu.setVisible (true); + if (button == 3) { + menu.createIMMenu (imHandle()); + menu.setVisible (true); + } } return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java index 3eb997483e..63b98474d4 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java @@ -32,7 +32,8 @@ public class Menu extends Widget { boolean hasLocation;
MenuItem cascade, selectedItem;
Decorations parent;
-
+ int imItem, imSeparator, imHandle;
+
/** * Constructs a new instance of this class given its parent, * and sets the style for the instance so that the instance @@ -219,6 +220,36 @@ void createHandle (int index) { }
}
+void createIMMenu (int imHandle) {
+ if (this.imHandle == imHandle) return;
+ this.imHandle = imHandle;
+ if (imHandle == 0) {
+ if (imItem != 0) {
+ OS.gtk_widget_destroy (imItem);
+ imItem = 0;
+ }
+ if (imSeparator != 0) {
+ OS.gtk_widget_destroy (imSeparator);
+ imSeparator = 0;
+ }
+ return;
+ }
+ if (imSeparator == 0) {
+ imSeparator = OS.gtk_separator_menu_item_new ();
+ OS.gtk_widget_show (imSeparator);
+ OS.gtk_menu_shell_insert (handle, imSeparator, -1);
+ }
+ if (imItem == 0) {
+ byte[] buffer = Converter.wcsToMbcs (null, SWT.getMessage("SWT_InputMethods"), true);
+ imItem = OS.gtk_image_menu_item_new_with_label (buffer);
+ OS.gtk_widget_show (imItem);
+ OS.gtk_menu_shell_insert (handle, imItem, -1);
+ }
+ int imSubmenu = OS.gtk_menu_new ();
+ OS.gtk_im_multicontext_append_menuitems (imHandle, imSubmenu);
+ OS.gtk_menu_item_set_submenu (imItem, imSubmenu);
+}
+
void createWidget (int index) {
super.createWidget (index);
parent.add (this);
@@ -284,6 +315,10 @@ public MenuItem getItem (int index) { checkWidget();
int list = OS.gtk_container_get_children (handle);
if (list == 0) error (SWT.ERROR_CANNOT_GET_ITEM);
+ int count = OS.g_list_length (list);
+ if (imSeparator != 0) count--;
+ if (imItem != 0) count--;
+ if (!(0 <= index && index < count)) error (SWT.ERROR_INVALID_RANGE);
int data = OS.g_list_nth_data (list, index);
OS.g_list_free (list);
if (data == 0) error (SWT.ERROR_CANNOT_GET_ITEM);
@@ -304,9 +339,11 @@ public int getItemCount () { checkWidget();
int list = OS.gtk_container_get_children (handle);
if (list == 0) return 0;
- int itemCount = OS.g_list_length (list);
+ int count = OS.g_list_length (list);
OS.g_list_free (list);
- return itemCount;
+ if (imSeparator != 0) count--;
+ if (imItem != 0) count--;
+ return count;
}
/** @@ -330,6 +367,8 @@ public MenuItem [] getItems () { int list = OS.gtk_container_get_children (handle);
if (list == 0) return new MenuItem [0];
int count = OS.g_list_length (list);
+ if (imSeparator != 0) count--;
+ if (imItem != 0) count--;
MenuItem [] items = new MenuItem [count];
for (int i=0; i<count; i++) {
int data = OS.g_list_nth_data (list, i);
@@ -560,6 +599,7 @@ void releaseWidget () { super.releaseWidget ();
parent = null;
cascade = null;
+ imItem = imSeparator = imHandle = 0;
}
/** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java index 4b69ad15a2..62040add15 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java @@ -113,7 +113,7 @@ public MenuItem (Menu parent, int style, int index) { this.parent = parent;
int count = parent.getItemCount ();
if (!(0 <= index && index <= count)) {
- error (SWT.ERROR_ITEM_NOT_ADDED);
+ error (SWT.ERROR_INVALID_RANGE);
}
createWidget (index);
}
|