/* 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 }
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)); } }