151
152
void createHandle (int index) {
153
handle = OS.gtk_plug_new (0);
154
if (handle == 0) error (SWT.ERROR_NO_HANDLES);
155
imageHandle = OS.gtk_image_new ();
156
if (imageHandle == 0) error (SWT.ERROR_NO_HANDLES);
157
OS.gtk_container_add (handle, imageHandle);
158
OS.gtk_widget_show (handle);
159
OS.gtk_widget_show (imageHandle);
160
int /*long*/ id = OS.gtk_plug_get_id (handle);
162
int /*long*/ screen = OS.gdk_screen_get_default ();
164
monitor = OS.gdk_screen_get_number (screen);
154
if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
155
handle = OS.gtk_status_icon_new ();
156
if (handle == 0) error (SWT.ERROR_NO_HANDLES);
157
imageHandle = OS.gtk_image_new ();
158
OS.gtk_status_icon_set_visible (handle,true);
160
handle = OS.gtk_plug_new (0);
161
if (handle == 0) error (SWT.ERROR_NO_HANDLES);
162
imageHandle = OS.gtk_image_new ();
163
if (imageHandle == 0) error (SWT.ERROR_NO_HANDLES);
164
OS.gtk_container_add (handle, imageHandle);
165
OS.gtk_widget_show (handle);
166
OS.gtk_widget_show (imageHandle);
167
int /*long*/ id = OS.gtk_plug_get_id (handle);
169
int /*long*/ screen = OS.gdk_screen_get_default ();
171
monitor = OS.gdk_screen_get_number (screen);
173
byte [] trayBuffer = Converter.wcsToMbcs (null, "_NET_SYSTEM_TRAY_S" + monitor, true);
174
int /*long*/ trayAtom = OS.gdk_atom_intern (trayBuffer, true);
175
int /*long*/ xTrayAtom = OS.gdk_x11_atom_to_xatom (trayAtom);
176
int /*long*/ xDisplay = OS.GDK_DISPLAY ();
177
int /*long*/ trayWindow = OS.XGetSelectionOwner (xDisplay, xTrayAtom);
178
byte [] messageBuffer = Converter.wcsToMbcs (null, "_NET_SYSTEM_TRAY_OPCODE", true);
179
int /*long*/ messageAtom = OS.gdk_atom_intern (messageBuffer, true);
180
int /*long*/ xMessageAtom = OS.gdk_x11_atom_to_xatom (messageAtom);
181
XClientMessageEvent event = new XClientMessageEvent ();
182
event.type = OS.ClientMessage;
183
event.window = trayWindow;
184
event.message_type = xMessageAtom;
186
event.data [0] = OS.GDK_CURRENT_TIME;
187
event.data [1] = OS.SYSTEM_TRAY_REQUEST_DOCK;
189
int /*long*/ clientEvent = OS.g_malloc (XClientMessageEvent.sizeof);
190
OS.memmove (clientEvent, event, XClientMessageEvent.sizeof);
191
OS.XSendEvent (xDisplay, trayWindow, false, OS.NoEventMask, clientEvent);
192
OS.g_free (clientEvent);
166
byte [] trayBuffer = Converter.wcsToMbcs (null, "_NET_SYSTEM_TRAY_S" + monitor, true);
167
int /*long*/ trayAtom = OS.gdk_atom_intern (trayBuffer, true);
168
int /*long*/ xTrayAtom = OS.gdk_x11_atom_to_xatom (trayAtom);
169
int /*long*/ xDisplay = OS.GDK_DISPLAY ();
170
int /*long*/ trayWindow = OS.XGetSelectionOwner (xDisplay, xTrayAtom);
171
byte [] messageBuffer = Converter.wcsToMbcs (null, "_NET_SYSTEM_TRAY_OPCODE", true);
172
int /*long*/ messageAtom = OS.gdk_atom_intern (messageBuffer, true);
173
int /*long*/ xMessageAtom = OS.gdk_x11_atom_to_xatom (messageAtom);
174
XClientMessageEvent event = new XClientMessageEvent ();
175
event.type = OS.ClientMessage;
176
event.window = trayWindow;
177
event.message_type = xMessageAtom;
179
event.data [0] = OS.GDK_CURRENT_TIME;
180
event.data [1] = OS.SYSTEM_TRAY_REQUEST_DOCK;
182
int /*long*/ clientEvent = OS.g_malloc (XClientMessageEvent.sizeof);
183
OS.memmove (clientEvent, event, XClientMessageEvent.sizeof);
184
OS.XSendEvent (xDisplay, trayWindow, false, OS.NoEventMask, clientEvent);
185
OS.g_free (clientEvent);
188
196
void deregister () {
246
254
return toolTipText;
257
int /*long*/ gtk_activate (int /*long*/ widget) {
258
postEvent (SWT.Selection);
260
* Feature in GTK. GTK will generate a single-click event before sending
261
* a double-click event. To know when to send a DefaultSelection, look for
262
* the single-click as the current event and for the double-click in the
265
int /*long*/ nextEvent = OS.gdk_event_peek ();
266
if (nextEvent != 0) {
267
int nextEventType = OS.GDK_EVENT_TYPE (nextEvent);
268
int /*long*/ currEvent = OS.gtk_get_current_event ();
269
int currEventType = 0;
270
if (currEvent != 0) {
271
currEventType = OS.GDK_EVENT_TYPE (currEvent);
272
OS.gdk_event_free (currEvent);
274
OS.gdk_event_free (nextEvent);
275
if (currEventType == OS.GDK_BUTTON_PRESS && nextEventType == OS.GDK_2BUTTON_PRESS) {
276
postEvent (SWT.DefaultSelection);
249
282
int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ eventPtr) {
250
283
GdkEventButton gdkEvent = new GdkEventButton ();
251
284
OS.memmove (gdkEvent, eventPtr, GdkEventButton.sizeof);
331
int /*long*/ gtk_status_icon_popup_menu (int /*long*/ widget, int /*long*/ button, int /*long*/ activate_time) {
332
sendEvent (SWT.MenuDetect);
298
336
void hookEvents () {
299
int eventMask = OS.GDK_BUTTON_PRESS_MASK;
300
OS.gtk_widget_add_events (handle, eventMask);
301
OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false);
302
OS.g_signal_connect_closure_by_id (imageHandle, display.signalIds [SIZE_ALLOCATE], 0, display.closures [SIZE_ALLOCATE], false);
337
if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
338
OS.g_signal_connect_closure (handle, OS.activate, display.closures [ACTIVATE], false);
339
OS.g_signal_connect_closure (handle, OS.popup_menu, display.closures [STATUS_ICON_POPUP_MENU], false);
341
int eventMask = OS.GDK_BUTTON_PRESS_MASK;
342
OS.gtk_widget_add_events (handle, eventMask);
343
OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false);
344
OS.g_signal_connect_closure_by_id (imageHandle, display.signalIds [SIZE_ALLOCATE], 0, display.closures [SIZE_ALLOCATE], false);
306
349
* Returns <code>true</code> if the receiver is visible and
419
469
imageList.put (imageIndex, image);
421
471
int /*long*/ pixbuf = imageList.getPixbuf (imageIndex);
422
OS.gtk_image_set_from_pixbuf (imageHandle, pixbuf);
423
OS.gtk_widget_show (imageHandle);
472
if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
473
OS.gtk_status_icon_set_from_pixbuf (handle, pixbuf);
474
OS.gtk_status_icon_set_visible (handle, true);
476
Rectangle rect = image.getBounds ();
477
OS.gtk_widget_set_size_request (handle, rect.width, rect.height);
478
OS.gtk_image_set_from_pixbuf (imageHandle, pixbuf);
479
OS.gtk_widget_show (imageHandle);
425
482
OS.gtk_widget_set_size_request (handle, 1, 1);
426
OS.gtk_image_set_from_pixbuf (imageHandle, 0);
427
OS.gtk_widget_hide (imageHandle);
483
if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
484
OS.gtk_status_icon_set_from_pixbuf (handle, 0);
485
OS.gtk_status_icon_set_visible (handle, false);
487
OS.gtk_image_set_from_pixbuf (imageHandle, 0);
488
OS.gtk_widget_hide (imageHandle);
453
515
* Sets the receiver's tool tip text to the argument, which
454
* may be null indicating that no tool tip text should be shown.
456
* @param value the new tool tip text (or null)
516
* may be null indicating that the default tool tip for the
517
* control will be shown. For a control that has a default
518
* tool tip, such as the Tree control on Windows, setting
519
* the tool tip text to an empty string replaces the default,
520
* causing no tool tip text to be shown.
522
* The mnemonic indicator (character '&') is not displayed in a tool tip.
523
* To display a single '&' in the tool tip, the character '&' can be
524
* escaped by doubling it in the string.
527
* @param string the new tool tip text (or null)
458
529
* @exception SWTException <ul>
459
530
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
499
577
sendEvent (SWT.Show);
500
578
if (isDisposed ()) return;
501
OS.gtk_widget_show (handle);
579
if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
580
OS.gtk_status_icon_set_visible (handle, visible);
582
OS.gtk_widget_show (handle);
503
OS.gtk_widget_hide (handle);
584
if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
585
OS.gtk_status_icon_set_visible (handle, visible);
587
OS.gtk_widget_hide (handle);
504
588
sendEvent (SWT.Hide);
b'\\ No newline at end of file'