Пример #1
0
static gboolean
handle_xembed_event (ClutterBackendX11 *backend_x11,
                     XEvent            *xevent)
{
  ClutterActor *stage;

  stage = clutter_stage_get_default ();

  switch (xevent->xclient.data.l[1])
    {
    case XEMBED_EMBEDDED_NOTIFY:
      CLUTTER_NOTE (EVENT, "got XEMBED_EMBEDDED_NOTIFY from %lx",
                    xevent->xclient.data.l[3]);

      ParentEmbedderWin = xevent->xclient.data.l[3];

      clutter_actor_realize (stage);
      clutter_actor_show (stage);

      xembed_set_info (backend_x11,
                       clutter_x11_get_stage_window (CLUTTER_STAGE (stage)),
                       XEMBED_MAPPED);
      break;
    case XEMBED_WINDOW_ACTIVATE:
      CLUTTER_NOTE (EVENT, "got XEMBED_WINDOW_ACTIVATE");
      break;
    case XEMBED_WINDOW_DEACTIVATE:
      CLUTTER_NOTE (EVENT, "got XEMBED_WINDOW_DEACTIVATE");
      break;
    case XEMBED_FOCUS_IN:
      CLUTTER_NOTE (EVENT, "got XEMBED_FOCUS_IN");
      if (ParentEmbedderWin)
        xembed_send_message (backend_x11, ParentEmbedderWin,
                             XEMBED_FOCUS_NEXT,
                             0, 0, 0);
      break;
    default:
      CLUTTER_NOTE (EVENT, "got unknown XEMBED message");
      break;
    }

  /* do not propagate the XEMBED events to the stage */
  return FALSE;
}
Пример #2
0
/* Procedure that Docks the icon */
static void
DockIcon(ClientData clientData)
{

	Window parent;
	unsigned int ret, atom;
	TrayIcon *icon= clientData;
	char* wm_name;

    Tk_MakeWindowExist(icon->win);

	Tk_SetWindowBackgroundPixmap(icon->win, ParentRelative);

	xembed_set_info(icon->win,XEMBED_MAPPED);

	atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False );
	send_message(display, _GetSystemTray (), atom,
			SYSTEM_TRAY_REQUEST_DOCK,Tk_WindowId(icon->win),0,0);
}