X-Git-Url: https://develop.uap-core.de/gitweb/uwplayer.git/blobdiff_plain/3c1675731caaac73d6c362075ffb82bc45d2f060..HEAD:/application/window.c diff --git a/application/window.c b/application/window.c index 1b351a8..96a4510 100644 --- a/application/window.c +++ b/application/window.c @@ -29,6 +29,7 @@ #include "player.h" #include "playlist.h" #include "xdnd.h" +#include "settings.h" #include "Fsb.h" #include "Sidebar.h" @@ -42,8 +43,11 @@ static void FileQuitCB(Widget w, void *udata, void *cdata); static void PlayRepeatCB(Widget w, void *udata, void *cdata); static void PlayRepeatListCB(Widget w, void *udata, void *cdata); static void PlayAutoPlayCB(Widget w, void *udata, void *cdata); +static void PlayRandomCB(Widget w, void *udata, void *cdata); 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); @@ -305,10 +309,16 @@ MainWindow* WindowCreate(Display *display) { XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, window->menubar); n++; XtSetArg(args[n], XmNwidth, 300); n++; - window->sidebar = CreateSidebar(container, "sidebar", args, 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++; @@ -332,6 +342,8 @@ MainWindow* WindowCreate(Display *display) { PlayListInit(window); + window->adjustWindowSize = true; // auto adjust window size by default + return window; } @@ -421,6 +433,15 @@ static Widget createToggleMenuItem( return menuItem; } +/* + * Creates a menu separator + */ +static Widget createMenuSeparator(Widget menu) { + Widget w = XmCreateSeparator(menu, "separator", NULL, 0); + XtManageChild(w); + return w; +} + static void WindowCreateMenu(MainWindow *win, Widget parent, Arg *mbargs, int nmbargs) { Widget menubar = XmCreateMenuBar(parent, "menubar", mbargs, nmbargs); XtManageChild(menubar); @@ -460,6 +481,16 @@ static void WindowCreateMenu(MainWindow *win, Widget parent, Arg *mbargs, int nm XmStringFree(s); Widget viewMenu = XmVaCreateSimplePulldownMenu(menubar, "menu", 2, NULL, NULL); + s = XmStringCreateSimple("Preferences"); + Widget prefMenuItem = XtVaCreateManagedWidget( + "menuitem", + xmCascadeButtonWidgetClass, + menubar, + XmNlabelString, s, + NULL); + XmStringFree(s); + Widget prefMenu = XmVaCreateSimplePulldownMenu(menubar, "menu", 3, NULL, NULL); + // file menu createMenuItem(fileMenu, "fileOpen", "Open...", 'O', "CtrlO", "Ctrl+O", FileOpenCB, NULL); createMenuItem(fileMenu, "fileQuit", "Exit", 'E', "CtrlQ", "Ctrl+Q", FileQuitCB, NULL); @@ -467,14 +498,23 @@ static void WindowCreateMenu(MainWindow *win, Widget parent, Arg *mbargs, int nm // play menu win->playRepeatTrackButton = createToggleMenuItem(playMenu, "playRepeatTrack", "Repeat", 'R', False, NULL, NULL, PlayRepeatCB, win); win->playRepeatListButton = createToggleMenuItem(playMenu, "playRepeatList", "Repeat List", 'L', False, NULL, NULL, PlayRepeatListCB, win); + win->playRandom = createToggleMenuItem(playMenu, "playRandom", "Random Playback", 'P', False, NULL, NULL, PlayRandomCB, win); win->playAutoPlayButton = createToggleMenuItem(playMenu, "playAutoNext", "Autoplay Folder", 'A', False, NULL, NULL, PlayAutoPlayCB, win); XtVaSetValues(win->playRepeatTrackButton, XmNindicatorType, XmONE_OF_MANY, NULL); XtVaSetValues(win->playRepeatListButton, XmNindicatorType, XmONE_OF_MANY, NULL); XtVaSetValues(win->playAutoPlayButton, XmNindicatorType, XmONE_OF_MANY, NULL); + XtVaSetValues(win->playRandom, XmNindicatorType, XmONE_OF_MANY, NULL); // view menu createMenuItem(viewMenu, "viewFullscreen", "Fullscreen", 'F', "F", "F", ViewFullscreenCB, NULL); win->viewSidebarButton = createToggleMenuItem(viewMenu, "viewSidebar", "View Sidebar", 'S', False, NULL, NULL, ViewSidebarCB, win); + + createMenuSeparator(viewMenu); + + win->viewAdjustWindowSize = createToggleMenuItem(viewMenu, "viewAdjustWindowSize", "Adjust Window Size", 'W', TRUE, NULL, NULL, ViewAdjustWindowSizeCB, win); + + // preferences menu + win->prefSingleInstanceButton = createToggleMenuItem(prefMenu, "prefSingleInstance", "Single Instance", 'S', FALSE, NULL, NULL, PrefSingleInstanceCB, win); } void go_fullscreen(Display *dsp, Window win) @@ -517,6 +557,8 @@ void WindowFullscreen(MainWindow *win, bool enableFullscreen) { main_window->fullscreen = FALSE; } + WindowShowSidebar(win, enableFullscreen ? false : win->sidebarvisible); + XEvent ev; memset(&ev, 0, sizeof(XEvent)); ev.type = ClientMessage; @@ -595,8 +637,10 @@ static void PlayRepeatCB(Widget w, void *udata, void *cdata) { win->playlist.repeatTrack = XmToggleButtonGadgetGetState(w); win->playlist.repeatList = 0; win->playlist.autoplayFolder = 0; + win->playlist.random = 0; XtVaSetValues(win->playRepeatListButton, XmNset, 0, NULL); XtVaSetValues(win->playAutoPlayButton, XmNset, 0, NULL); + XtVaSetValues(win->playRandom, XmNset, 0, NULL); } static void PlayRepeatListCB(Widget w, void *udata, void *cdata) { @@ -604,8 +648,10 @@ static void PlayRepeatListCB(Widget w, void *udata, void *cdata) { win->playlist.repeatList = XmToggleButtonGadgetGetState(w); win->playlist.repeatTrack = 0; win->playlist.autoplayFolder = 0; + win->playlist.random = 0; XtVaSetValues(win->playRepeatTrackButton, XmNset, 0, NULL); XtVaSetValues(win->playAutoPlayButton, XmNset, 0, NULL); + XtVaSetValues(win->playRandom, XmNset, 0, NULL); } static void PlayAutoPlayCB(Widget w, void *udata, void *cdata) { @@ -613,8 +659,21 @@ static void PlayAutoPlayCB(Widget w, void *udata, void *cdata) { win->playlist.autoplayFolder = XmToggleButtonGadgetGetState(w); win->playlist.repeatTrack = 0; win->playlist.repeatList = 0; + win->playlist.random = 0; XtVaSetValues(win->playRepeatTrackButton, XmNset, 0, NULL); XtVaSetValues(win->playRepeatListButton, XmNset, 0, NULL); + XtVaSetValues(win->playRandom, XmNset, 0, NULL); +} + +static void PlayRandomCB(Widget w, void *udata, void *cdata) { + MainWindow *win = udata; + win->playlist.random = XmToggleButtonGadgetGetState(w); + win->playlist.repeatTrack = 0; + win->playlist.repeatList = 0; + win->playlist.autoplayFolder = 0; + XtVaSetValues(win->playRepeatTrackButton, XmNset, 0, NULL); + XtVaSetValues(win->playRepeatListButton, XmNset, 0, NULL); + XtVaSetValues(win->playAutoPlayButton, XmNset, 0, NULL); } static void ViewFullscreenCB(Widget w, void *udata, void *cdata) { @@ -628,10 +687,34 @@ static void ViewFullscreenCB(Widget w, void *udata, void *cdata) { static void ViewSidebarCB(Widget w, void *udata, void *cdata) { MainWindow *win = udata; XmToggleButtonCallbackStruct *cb = cdata; - if(cb->set) { - WindowShowSidebar(win); - } else { - WindowHideSidebar(win); + win->sidebarvisible = cb->set; + WindowShowSidebar(win, cb->set); +} + +static void ViewAdjustWindowSizeCB(Widget w, void *udata, void *cdata) { + MainWindow *win = udata; + win->adjustWindowSize = XmToggleButtonGadgetGetState(w); +} + +static void PrefSingleInstanceCB(Widget w, void *udata, void *cdata) { + MainWindow *win = udata; + win->singleInstance = XmToggleButtonGadgetGetState(w); + + Display *dp = XtDisplay(w); + + if(!win->singleInstance) { + ShutdownInstanceSocket(dp); + return; + } + + Bool disable_item = False; + if(CreateSingleInstanceSocket(dp, &disable_item)) { + // TODO: err + disable_item = True; + } + if(disable_item) { + win->singleInstance = 0; + XmToggleButtonGadgetSetState(w, False, False); } } @@ -688,14 +771,14 @@ void WindowShowPlayerCursor(MainWindow *win) { win->cursorhidden = False; } -void WindowHideSidebar(MainWindow *win) { - XtUnmanageChild(win->sidebar); - XtVaSetValues(win->player_widget, XmNrightAttachment, XmATTACH_FORM, NULL); -} - -void WindowShowSidebar(MainWindow *win) { - XtManageChild(win->sidebar); - XtVaSetValues(win->player_widget, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, win->sidebar, NULL); +void WindowShowSidebar(MainWindow *win, bool visible) { + if(visible) { + XtManageChild(win->sidebar_scrolledwindow); + XtVaSetValues(win->player_widget, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, win->sidebar_scrolledwindow, NULL); + } else { + XtUnmanageChild(win->sidebar_scrolledwindow); + XtVaSetValues(win->player_widget, XmNrightAttachment, XmATTACH_FORM, NULL); + } } void WindowUpdate(MainWindow *win) {