static void WindowCreateMenu(MainWindow *win, Widget parent, Arg *args, int nargs);
-static void ViewFullscreenCB(Widget w, void *udata, void *cdata);
-static void ViewSidebarCB(Widget w, void *udata, void *cdata);
-static void ViewAdjustWindowSizeCB(Widget w, void *udata, void *cdata);
static void PrefSingleInstanceCB(Widget w, void *udata, void *cdata);
static void WindowRealized(MainWindow *win);
}
WindowShowSidebar(window, FALSE);
-
- /*
- // toplevel window
- n = 0;
- XtSetArg(args[n], XmNtitle, APP_NAME); n++;
- window->window = XtAppCreateShell(
- APP_NAME,
- APP_CLASS,
- applicationShellWidgetClass,
- //vendorShellWidgetClass,
- display,
- args,
- n);
-
- // close handler
- Atom wm_delete_window;
- wm_delete_window = XmInternAtom(
- display,
- "WM_DELETE_WINDOW",
- 0);
- XmAddWMProtocolCallback(
- window->window,
- wm_delete_window,
- window_close_handler,
- window);
-
- // resize handler
- XtAddEventHandler(window->window, StructureNotifyMask, False, resizeEH, window);
-
- n = 0;
- XtSetArg(args[n], XmNwidth, 360); n++;
- XtSetArg(args[n], XmNheight, 220); n++;
- XtSetArg(args[n], XmNshadowThickness, 0); n++;
- Widget container = XmCreateForm(window->window, "form", args, n);
- XtManageChild(container);
- XtAddEventHandler(container, KeyPressMask, FALSE, windowKeyEH, window);
-
- n = 0;
- XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
- WindowCreateMenu(window, container, args, n);
-
- n = 0;
- XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
- XtSetArg(args[n], XmNtopWidget, window->menubar); n++;
- XtSetArg(args[n], XmNwidth, 300); n++;
- XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); n++;
- XtSetArg(args[n], XmNscrollBarDisplayPolicy, XmAS_NEEDED); n++;
- XtSetArg(args[n], XmNspacing, 0); n++;
- XtSetArg(args[n], XmNshadowThickness, 0); n++;
- window->sidebar_scrolledwindow = XmCreateScrolledWindow(container, "sw_sidebar", args, n);
- window->sidebar = CreateSidebar(window->sidebar_scrolledwindow, "sidebar", args, 0);
- SidebarSetWindow(window->sidebar, window);
- XtManageChild(window->sidebar);
- //XtManageChild(window->sidebar);
-
- n = 0;
- XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNrightWidget, window->sidebar); n++;
- XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
- XtSetArg(args[n], XmNtopWidget, window->menubar); n++;
- XtSetArg(args[n], XmNbackground, BlackPixelOfScreen(XtScreen(window->window))); n++;
- window->player_widget = XmCreateDrawingArea(container, "player", args, n);
- XtManageChild(window->player_widget);
- XtAddCallback(window->player_widget, XmNinputCallback, playerWidgetInputCB, window);
- XmProcessTraversal(window->player_widget, XmTRAVERSE_CURRENT);
- XtAddEventHandler(window->player_widget, PointerMotionMask | ButtonPressMask | ButtonReleaseMask | FocusChangeMask |
- EnterWindowMask | KeyPressMask | KeyReleaseMask |
- LeaveWindowMask, FALSE, playerEH, window);
- */
-
// get F keycode
keycodeF = XKeysymToKeycode(XtDisplay(obj->widget), XStringToKeysym("F"));
}
void WindowShow(MainWindow *win) {
- //XtRealizeWidget(win->window);
ui_show(win->obj);
}
-/*
- * Creates a XmPushButton menu item
- */
-static Widget createMenuItem(
- Widget menu,
- char *name,
- char *label,
- char mnemonic,
- const char *accelerator,
- char *accelerator_text,
- XtCallbackProc callback,
- void *cbData)
-{
- Arg args[16];
- int n = 0;
-
- XmString s1 = XmStringCreateSimple(label);
- XtSetArg(args[n], XmNlabelString, s1); n++;
- XtSetArg(args[n], XmNmnemonic, mnemonic); n++;
- XmString at = NULL;
- if(accelerator && accelerator_text) {
- at = XmStringCreateSimple(accelerator_text);
- XtSetArg(args[n], XmNaccelerator, accelerator); n++;
- XtSetArg(args[n], XmNacceleratorText, at); n++;
- }
-
- Widget menuItem = XmCreatePushButtonGadget(menu, name, args, n);
- XtManageChild(menuItem);
- XmStringFree(s1);
- if(at) XmStringFree(at);
-
- if(callback) {
- XtAddCallback(menuItem, XmNactivateCallback, (XtCallbackProc)callback, cbData);
- }
-
- return menuItem;
-}
-
-/*
- * Creates a XmToggleButton menu item
- */
-static Widget createToggleMenuItem(
- Widget menu,
- char *name,
- char *label,
- char mnemonic,
- Boolean defaultValue,
- const char *accelerator,
- char *accelerator_text,
- XtCallbackProc callback,
- void *cbData)
-{
- Arg args[16];
- int n = 0;
-
- XmString s1 = XmStringCreateSimple(label);
- XtSetArg(args[n], XmNlabelString, s1); n++;
- XtSetArg(args[n], XmNmnemonic, mnemonic); n++;
- XtSetArg(args[n], XmNset, defaultValue); n++;
- XmString at = NULL;
- if(accelerator && accelerator_text) {
- at = XmStringCreateSimple(accelerator_text);
- XtSetArg(args[n], XmNaccelerator, accelerator); n++;
- XtSetArg(args[n], XmNacceleratorText, at); n++;
- }
-
- Widget menuItem = XmCreateToggleButtonGadget(menu, name, args, n);
- XtManageChild(menuItem);
- XmStringFree(s1);
- if(at) XmStringFree(at);
-
- if(callback) {
- XtAddCallback(menuItem, XmNvalueChangedCallback, (XtCallbackProc)callback, cbData);
- }
-
- return menuItem;
-}
-
-/*
- * Creates a menu separator
- */
-static Widget createMenuSeparator(Widget menu) {
- Widget w = XmCreateSeparator(menu, "separator", NULL, 0);
- XtManageChild(w);
- return w;
-}
-
-void go_fullscreen(Display *dsp, Window win)
-{
- XEvent xev;
- Atom wm_state = XInternAtom(dsp, "_NET_WM_STATE", False);
- Atom fullscreen = XInternAtom(dsp, "_NET_WM_STATE_FULLSCREEN", False);
- memset(&xev, 0, sizeof(xev));
- xev.type = ClientMessage;
- xev.xclient.window = win;
- xev.xclient.message_type = wm_state;
- xev.xclient.format = 32;
- xev.xclient.data.l[0] = 1; // _NET_WM_STATE_ADD
- xev.xclient.data.l[1] = fullscreen;
- xev.xclient.data.l[2] = 0;
- XSendEvent(dsp, DefaultRootWindow(dsp), False,
- SubstructureNotifyMask, &xev);
-}
-
static Atom net_wm_state;
static Atom net_wm_state_fullscreen;
static int net_wm_atoms_initialized = 0;
void WindowFullscreen(MainWindow *win, bool enableFullscreen) {
- Display *dpy = XtDisplay(win->obj->widget);
-
- // init net_wm_state atoms
- if(!net_wm_atoms_initialized) {
- net_wm_state = XInternAtom(dpy, "_NET_WM_STATE", False);
- net_wm_state_fullscreen = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
- net_wm_atoms_initialized = 1;
- }
-
ui_window_menubar_set_visible(win->obj, !enableFullscreen);
win->fullscreen = enableFullscreen;
WindowShowSidebar(win, enableFullscreen ? false : win->sidebarvisible);
-
- XEvent ev;
- memset(&ev, 0, sizeof(XEvent));
- ev.type = ClientMessage;
- ev.xclient.window = XtWindow(win->obj->widget);
- ev.xclient.message_type = net_wm_state;
- ev.xclient.format = 32;
- ev.xclient.data.l[0] = enableFullscreen ? 1 : 0;
- ev.xclient.data.l[1] = net_wm_state_fullscreen;
- ev.xclient.data.l[2] = 0;
- XSendEvent(dpy, DefaultRootWindow(dpy), False, SubstructureNotifyMask | SubstructureRedirectMask, &ev);
-}
-
-static void ViewFullscreenCB(Widget w, void *udata, void *cdata) {
- if(main_window->fullscreen) {
- WindowFullscreen(main_window, FALSE);
- } else {
- WindowFullscreen(main_window, TRUE);
- }
-}
-
-static void ViewSidebarCB(Widget w, void *udata, void *cdata) {
- MainWindow *win = udata;
- XmToggleButtonCallbackStruct *cb = cdata;
- win->sidebarvisible = cb->set;
- WindowShowSidebar(win, cb->set);
-}
-
-static void ViewAdjustWindowSizeCB(Widget w, void *udata, void *cdata) {
- MainWindow *win = udata;
- win->adjustWindowSize = XmToggleButtonGadgetGetState(w);
+ ui_window_fullscreen(win->obj, enableFullscreen);
}
static void PrefSingleInstanceCB(Widget w, void *udata, void *cdata) {