Ejemplo n.º 1
0
 void hookEvents() {
   super.hookEvents();
   if ((style & SWT.SEPARATOR) != 0) return;
   if ((style & (SWT.RADIO | SWT.CHECK)) != 0) {
     int handler = OS.gcnew_RoutedEventHandler(jniRef, "HandleChecked");
     if (handler == 0) error(SWT.ERROR_NO_HANDLES);
     OS.ToggleButton_Checked(handle, handler);
     OS.GCHandle_Free(handler);
     handler = OS.gcnew_RoutedEventHandler(jniRef, "HandleUnchecked");
     if (handler == 0) error(SWT.ERROR_NO_HANDLES);
     OS.ToggleButton_Unchecked(handle, handler);
     OS.GCHandle_Free(handler);
   } else {
     int handler = OS.gcnew_RoutedEventHandler(jniRef, "HandleClick");
     if (handler == 0) error(SWT.ERROR_NO_HANDLES);
     OS.ButtonBase_Click(handle, handler);
     OS.GCHandle_Free(handler);
   }
   int handler = OS.gcnew_MouseEventHandler(jniRef, "HandleMouseEnter");
   if (handler == 0) error(SWT.ERROR_NO_HANDLES);
   OS.UIElement_MouseEnter(handle, handler);
   OS.GCHandle_Free(handler);
   handler = OS.gcnew_MouseEventHandler(jniRef, "HandleMouseLeave");
   if (handler == 0) error(SWT.ERROR_NO_HANDLES);
   OS.UIElement_MouseLeave(handle, handler);
   OS.GCHandle_Free(handler);
 }
Ejemplo n.º 2
0
 void hookEvents() {
   super.hookEvents();
   if ((style & SWT.SEPARATOR) != 0) return;
   int windowProc = display.windowProc;
   OS.XtAddEventHandler(handle, OS.KeyPressMask, false, windowProc, KEY_PRESS);
   OS.XtAddEventHandler(handle, OS.KeyReleaseMask, false, windowProc, KEY_RELEASE);
   OS.XtAddEventHandler(handle, OS.ButtonPressMask, false, windowProc, BUTTON_PRESS);
   OS.XtAddEventHandler(handle, OS.ButtonReleaseMask, false, windowProc, BUTTON_RELEASE);
   OS.XtAddEventHandler(handle, OS.PointerMotionMask, false, windowProc, POINTER_MOTION);
   OS.XtAddEventHandler(handle, OS.EnterWindowMask, false, windowProc, ENTER_WINDOW);
   OS.XtAddEventHandler(handle, OS.LeaveWindowMask, false, windowProc, LEAVE_WINDOW);
   OS.XtAddCallback(handle, OS.XmNexposeCallback, windowProc, EXPOSURE_CALLBACK);
   OS.XtInsertEventHandler(
       handle, OS.FocusChangeMask, false, windowProc, FOCUS_CHANGE, OS.XtListTail);
 }
Ejemplo n.º 3
0
  void hookEvents() {
    super.hookEvents();
    if ((style & SWT.SEPARATOR) != 0) return;
    OS.g_signal_connect_closure(handle, OS.clicked, display.closures[CLICKED], false);
    /*
     * Feature in GTK. GtkToolItem does not respond to basic listeners
     * such as button-press, enter-notify to it. The fix is to assign
     * the listener to child (GtkButton) of the tool-item.
     */
    eventHandle = OS.gtk_bin_get_child(handle);
    if ((style & SWT.DROP_DOWN) != 0 && OS.GTK_VERSION >= OS.VERSION(2, 6, 0)) {
      long /*int*/ list = OS.gtk_container_get_children(eventHandle);
      eventHandle = OS.g_list_nth_data(list, 0);
      if (arrowHandle != 0)
        OS.g_signal_connect_closure(arrowHandle, OS.clicked, display.closures[CLICKED], false);
    }
    OS.g_signal_connect_closure(
        handle, OS.create_menu_proxy, display.closures[CREATE_MENU_PROXY], false);

    OS.g_signal_connect_closure_by_id(
        eventHandle,
        display.signalIds[ENTER_NOTIFY_EVENT],
        0,
        display.closures[ENTER_NOTIFY_EVENT],
        false);
    OS.g_signal_connect_closure_by_id(
        eventHandle,
        display.signalIds[LEAVE_NOTIFY_EVENT],
        0,
        display.closures[LEAVE_NOTIFY_EVENT],
        false);
    OS.g_signal_connect_closure_by_id(
        eventHandle, display.signalIds[FOCUS_IN_EVENT], 0, display.closures[FOCUS_IN_EVENT], false);
    OS.g_signal_connect_closure_by_id(
        eventHandle,
        display.signalIds[FOCUS_OUT_EVENT],
        0,
        display.closures[FOCUS_OUT_EVENT],
        false);
    /*
     * Feature in GTK.  Usually, GTK widgets propagate all events to their
     * parent when they are done their own processing.  However, in contrast
     * to other widgets, the buttons that make up the tool items, do not propagate
     * the mouse up/down events. It is interesting to note that they DO propagate
     * mouse motion events.  The fix is to explicitly forward mouse up/down events
     * to the parent.
     */
    int mask =
        OS.GDK_EXPOSURE_MASK
            | OS.GDK_POINTER_MOTION_MASK
            | OS.GDK_BUTTON_PRESS_MASK
            | OS.GDK_BUTTON_RELEASE_MASK
            | OS.GDK_ENTER_NOTIFY_MASK
            | OS.GDK_LEAVE_NOTIFY_MASK
            | OS.GDK_KEY_PRESS_MASK
            | OS.GDK_KEY_RELEASE_MASK
            | OS.GDK_FOCUS_CHANGE_MASK;
    OS.gtk_widget_add_events(eventHandle, mask);
    OS.g_signal_connect_closure_by_id(
        eventHandle,
        display.signalIds[BUTTON_PRESS_EVENT],
        0,
        display.closures[BUTTON_PRESS_EVENT],
        false);
    OS.g_signal_connect_closure_by_id(
        eventHandle,
        display.signalIds[BUTTON_RELEASE_EVENT],
        0,
        display.closures[BUTTON_RELEASE_EVENT],
        false);
    OS.g_signal_connect_closure_by_id(
        eventHandle, display.signalIds[EVENT_AFTER], 0, display.closures[EVENT_AFTER], false);

    long /*int*/ topHandle = topHandle();
    OS.g_signal_connect_closure_by_id(
        topHandle, display.signalIds[MAP], 0, display.closures[MAP], true);
  }