Пример #1
0
static void
handle_window_event (GdkWindow            *window,
                     const MirWindowEvent *event)
{
  GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
  MirWindowState state;

  switch (mir_window_event_get_attribute (event))
    {
    case mir_window_attrib_type:
      _gdk_mir_window_impl_set_window_type (impl, mir_window_event_get_attribute_value (event));
      break;
    case mir_window_attrib_state:
      state = mir_window_event_get_attribute_value (event);
      _gdk_mir_window_impl_set_window_state (impl, state);

      switch (state)
        {
        case mir_window_state_restored:
        case mir_window_state_hidden:
          gdk_synthesize_window_state (window,
                                       GDK_WINDOW_STATE_ICONIFIED |
                                       GDK_WINDOW_STATE_MAXIMIZED |
                                       GDK_WINDOW_STATE_FULLSCREEN,
                                       0);
          break;
        case mir_window_state_minimized:
          gdk_synthesize_window_state (window,
                                       GDK_WINDOW_STATE_MAXIMIZED |
                                       GDK_WINDOW_STATE_FULLSCREEN,
                                       GDK_WINDOW_STATE_ICONIFIED);
          break;
        case mir_window_state_maximized:
        case mir_window_state_vertmaximized:
        case mir_window_state_horizmaximized:
          gdk_synthesize_window_state (window,
                                       GDK_WINDOW_STATE_ICONIFIED |
                                       GDK_WINDOW_STATE_FULLSCREEN,
                                       GDK_WINDOW_STATE_MAXIMIZED);
          break;
        case mir_window_state_fullscreen:
          gdk_synthesize_window_state (window,
                                       GDK_WINDOW_STATE_ICONIFIED |
                                       GDK_WINDOW_STATE_MAXIMIZED,
                                       GDK_WINDOW_STATE_FULLSCREEN);
          break;
        default:
          break;
        }

      break;
    case mir_window_attrib_swapinterval:
      break;
    case mir_window_attrib_focus:
      generate_focus_event (window, mir_window_event_get_attribute_value (event) != 0);
      break;
    default:
      break;
    }
}
Пример #2
0
static void
generate_focus_event (GdkWindow *window, gboolean focused)
{
  GdkEvent *event;

  if (focused)
    gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FOCUSED);
  else
    gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FOCUSED, 0);

  event = gdk_event_new (GDK_FOCUS_CHANGE);
  event->focus_change.send_event = FALSE;
  event->focus_change.in = focused;

  send_event (window, get_pointer (window), event);
}