XlibMenu* CreateXlibMenu(FcitxClassicUI *classicui) { XlibMenu *menu = fcitx_utils_malloc0(sizeof(XlibMenu)); menu->owner = classicui; InitXlibMenu(menu); FcitxX11AddXEventHandler(classicui->owner, MenuWindowEventHandler, menu); FcitxX11AddCompositeHandler(classicui->owner, ReloadXlibMenu, menu); return menu; }
void ReloadXlibMenu(void* arg, boolean enabled) { XlibMenu* menu = (XlibMenu*) arg; boolean visable = WindowIsVisable(menu->owner->dpy, menu->menuWindow); XFreePixmap(menu->owner->dpy, menu->pixmap); XDestroyWindow(menu->owner->dpy, menu->menuWindow); XftDrawDestroy(menu->xftDraw); menu->pixmap = None; menu->menuWindow = None; InitXlibMenu(menu); if (visable) XMapWindow(menu->owner->dpy, menu->menuWindow); }
XlibMenu* CreateXlibMenu(FcitxLightUI *lightui) { XlibMenu *menu = fcitx_malloc0(sizeof(XlibMenu)); menu->owner = lightui; InitXlibMenu(menu); FcitxModuleFunctionArg arg; arg.args[0] = MenuWindowEventHandler; arg.args[1] = menu; InvokeFunction(lightui->owner, FCITX_X11, ADDXEVENTHANDLER, arg); arg.args[0] = ReloadXlibMenu; arg.args[1] = menu; InvokeFunction(lightui->owner, FCITX_X11, ADDCOMPOSITEHANDLER, arg); return menu; }
void ReloadXlibMenu(void* arg, boolean enabled) { XlibMenu* menu = (XlibMenu*) arg; boolean visable = WindowIsVisable(menu->owner->dpy, menu->menuWindow); cairo_surface_destroy(menu->menu_cs); cairo_surface_destroy(menu->menu_x_cs); XDestroyWindow(menu->owner->dpy, menu->menuWindow); menu->menu_cs = NULL; menu->menu_x_cs = NULL; menu->menuWindow = None; InitXlibMenu(menu); if (visable) XMapWindow(menu->owner->dpy, menu->menuWindow); }