summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2002-12-16 19:19:39 +0000
committerFelipe Heidrich <fheidric>2002-12-16 19:19:39 +0000
commite1266ffa4872923c682e289b143db03a6a5e0f65 (patch)
treee291a7ebe35747144dbd16a1eb45942a31425dde /bundles/org.eclipse.swt/Eclipse SWT
parent4c6dd21317219ff610b6fd64c06fe54f983ea351 (diff)
downloadeclipse.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')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages.properties1
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java5
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java46
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java2
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);
}