Ejemplo n.º 1
0
/* Draw menu context */
void draw_ctx_menu(struct params_t *params)
{
#ifdef USE_FBMENU
	gui_show_menu(params->gui, params->menu);
#endif
#ifdef USE_TEXTUI
	tui_show_menu(params->tui, params->menu);
#endif
}
Ejemplo n.º 2
0
static void gui_focus_event(winlist_t *win, XEvent *event)
{
    switch (event->type)
    {
	case MapNotify:
	    DebugLog(1, ("MapNotify\n"));
	    if (!tray_init)
	    {
		XUnmapWindow(gui->display, win->window);
		alarm(1);
	    }
	    break;
	case UnmapNotify:
	    DebugLog(1, ("UnMapNotify\n"));
	    break;
	case ReparentNotify:
	    DebugLog(1, ("ReparentNotify Root(%d), Event_win(%d), Parent_Win(%d)\n", gui->root, event->xreparent.event, event->xreparent.parent));
	    parent_window = event->xreparent.parent;
	    if (parent_window == gui->root)
	    {
		DebugLog(1, ("Escape Manager Window\n"));
		tray_init = False;
	    }
	    break;
	case ConfigureNotify:
	case MotionNotify: /* Mouse Over */
	    {
	    XConfigureEvent *e = &event->xconfigure;
	    DebugLog(1, ("(my %d) ConfigureNotify manager=%d, Window=%d, x=%d, y=%d, w=%d, h=%d, border_w:%d, aboveWin=%d, override=%d\n",win->window, manager_window, e->window, e->x, e->y, e->width, e->height, e->border_width, e->above, e->override_redirect));
 		// width, height 會被改變,所以這裡要偵測大小是否被改變了
		// 有的話要重新把圖示放在新的範圍中間
		if (win->window == e->window && (win->width != e->width || win->height != e->height))
		{
		    DebugLog(1, ("Window size changed!\n"));
/*
		    int sw = (e->width - win->width) / 2;
		    int sh = (e->height - win->height) / 2;
		    int new_x = (sw > 1) ? sw : 0;
		    int new_y = (sh > 1) ? sh : 0;
		    XMoveWindow(gui->display, win->window, new_x, new_y);
*/
		    win->width = e->width;
		    win->height = e->height;
		}
	    gui_reread_resolution(win);
	    }
	    break;
//	case MotionNotify: /* Mouse Over */
//	    break;
	case EnterNotify: /* Mouse In */
	    DebugLog(1, ("EnterNotify\n"));
	    if (!gui_msgbox_actived() && !gui_menu_actived() )
	    {
		static char s[20];
		strcpy(s, "OXIM");
		strcat(s, " ");
		strcat(s, oxim_version());
		gui_show_msgbox(win, s);
	    }
	    break;
	case LeaveNotify: /* Mouse Out */
	    if (gui_msgbox_actived())
	    {
		gui_hide_msgbox(win);
	    }
	    break;
	case Expose:
	    DebugLog(1, ("Expose count=%d\n", event->xexpose.count));
	    if (event->xexpose.count == 0)
	    {
		gui_tray_draw(win);
	    }
	    break;
	case ButtonPress: /* 按下滑鼠按鍵 */
	    if (event->xbutton.button == Button1)
	    {
		if (gui_msgbox_actived())
		{
		    gui_hide_msgbox(win);
		}
		if (gui_menu_actived())
		{
		    gui_hide_menu();
		}
		else
		{
		    gui_show_menu(win);
		}
	    }
	    break;
	case ClientMessage: /* Client message */
	    if (event->xclient.message_type == xembed_atom)
	    {
		DebugLog(1, ("in tray %d\n", event->xclient.data.l[1]));
	    }
	    else
	    {
		DebugLog(1, ("Unknow Client message -> %d\n", event->xclient.message_type));
	    }
	    break;
	case PropertyNotify:
	    DebugLog(1, ("PropertyNotify\n"));
	    break;
	case DestroyNotify:
	    DebugLog(1, ("DestroyNotify\n"));
	    break;
	default:
	    DebugLog(1, ("tray win event %d\n", event->type));
    }
}