wmgen

Генератор WINGs апликација
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување ed948ff1f4b9659788b86bda63258feabb28616f
родитељ 9c6342ddef935c647ac93e1bacffcf80a775cf30
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Wed, 13 Dec 2023 22:09:13 +0100

Remove leader window (merge with main) and xctx; set main window closable

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
Mapp.h | 2--
Mmain.c | 47+++++++++++++++++++++--------------------------
Mwmgen | 5++---
измењених датотека: 3, додавања: 23(+), брисања: 31(-)

diff --git a/app.h b/app.h @@ -16,14 +16,12 @@ struct WMNewApp { XClassHint* class_hint; Display* dpy; XWMHints* hints; - Window leader; WMMenu* main_menu; WMWindow* mainwin; char mainwin_title[4096]; RContext* rctx; WMScreen* scr; WMPixmap* wmpixmap; - XContext xctx; }; extern struct WMNewApp wma; diff --git a/main.c b/main.c @@ -16,7 +16,7 @@ #include "config.h" #include "appicon.xpm" -/* Assumes leader window has been created */ +/* Assumes main window has been created */ void create_icon(struct WMNewApp* wma) { @@ -39,7 +39,7 @@ create_icon(struct WMNewApp* wma) wma->hints->icon_pixmap = wma->app_icon; wma->hints->icon_mask = wma->app_mask; wma->hints->flags |= (IconPixmapHint | IconMaskHint); - XSetWMHints(wma->dpy, wma->leader, wma->hints); + XSetWMHints(wma->dpy, WMWidgetXID(wma->mainwin), wma->hints); if (!(wma->wmpixmap = WMCreatePixmapFromRImage(wma->scr, wma->app_image, 0))) @@ -48,32 +48,23 @@ create_icon(struct WMNewApp* wma) } void -create_leader_window(struct WMNewApp* wma) +create_main_window(struct WMNewApp* wma) { - wma->leader = XCreateSimpleWindow(wma->dpy, DefaultRootWindow(wma->dpy), - 10, 10, 10, 10, 0, 0, 0); + MyGNUstepWMAttributes attributes; if (!(wma->class_hint = XAllocClassHint())) - exit(error(1, "XAllocClassHint(leader) failed")); + exit(error(1, "XAllocClassHint failed")); wma->class_hint->res_name = "wmnewapp"; wma->class_hint->res_class = "WMNewApp"; - XSetClassHint(wma->dpy, wma->leader, wma->class_hint); + + wma->mainwin = WMCreateWindow(wma->scr, wma->class_hint->res_name); + WMRealizeWidget(wma->mainwin); if (!(wma->hints = XAllocWMHints())) exit(error(1, "XAllocWMHints failed")); - wma->hints->window_group = wma->leader; + wma->hints->window_group = WMWidgetXID(wma->mainwin); wma->hints->flags = WindowGroupHint; - XSetWMHints(wma->dpy, wma->leader, wma->hints); -} -/* Assumes create_leader_window has previously been called */ -void -create_main_window(struct WMNewApp* wma) -{ - MyGNUstepWMAttributes attributes; - - wma->mainwin = WMCreateWindow(wma->scr, "mainwin"); - WMRealizeWidget(wma->mainwin); set_mainwin_title(wma); WMResizeWidget(wma->mainwin, 640, 480); WMSetWindowCloseAction(wma->mainwin, exit_action, wma); @@ -82,7 +73,7 @@ create_main_window(struct WMNewApp* wma) XSetWMHints(wma->dpy, WMWidgetXID(wma->mainwin), wma->hints); memset((void*)&attributes, 0, sizeof(MyGNUstepWMAttributes)); - attributes.window_style = (WMTitledWindowMask + attributes.window_style = (WMClosableWindowMask | WMTitledWindowMask | WMMiniaturizableWindowMask | WMResizableWindowMask); attributes.window_level = WMNormalWindowLevel; attributes.extra_flags = GSFullKeyboardEventsFlag; @@ -144,6 +135,7 @@ void exit_menu_action(void* data, int code, Time timestamp) { struct WMNewApp* wma = (struct WMNewApp*)data; + WMLog(wma, "exit_menu_action called\n"); exit_action(wma->mainwin, wma); } @@ -207,6 +199,7 @@ void info_panel_menu_action(void* data, int code, Time timestamp) { struct WMNewApp* wma = (struct WMNewApp*)data; + WMLog(wma, "info_menu_action called\n"); info_panel_action(wma->mainwin, wma); } @@ -237,6 +230,7 @@ void open_menu_action(void* data, int code, Time timestamp) { struct WMNewApp* wma = (struct WMNewApp*)data; + WMLog(wma, "open_menu_action called\n"); open_action(wma->mainwin, wma); } @@ -252,6 +246,7 @@ void save_menu_action(void* data, int code, Time timestamp) { struct WMNewApp* wma = (struct WMNewApp*)data; + WMLog(wma, "save_menu_action called\n"); save_action(wma->mainwin, wma); } @@ -318,20 +313,20 @@ main(int argc, char** argv) if (!(wma.dpy = XOpenDisplay(""))) exit(error(1, "XOpenDisplay failed")); - create_leader_window(&wma); + if (!(wma.scr = WMCreateScreen(wma.dpy, DefaultScreen(wma.dpy)))) + exit(error(1, "WMCreateScreen failed")); + + create_main_window(&wma); - XSetCommand(wma.dpy, wma.leader, argv, argc); - wma.xctx = XUniqueContext(); - wma.scr = WMCreateScreen(wma.dpy, DefaultScreen(wma.dpy)); wma.app = WMAppCreateWithMain(wma.dpy, DefaultScreen(wma.dpy), - wma.leader); + WMWidgetXID(wma.mainwin)); + XSetCommand(wma.dpy, WMWidgetXID(wma.mainwin), argv, argc); + WMSetWindowCloseAction(wma.mainwin, exit_action, &wma); - create_main_window(&wma); create_icon(&wma); create_main_menu(&wma); WMSetFocusToWidget(wma.mainwin); - XSaveContext(wma.dpy, WMWidgetXID(wma.mainwin), wma.xctx, NULL); WMCreateEventHandler(WMWidgetView(wma.mainwin), KeyPressMask, handle_keypress, &wma); diff --git a/wmgen b/wmgen @@ -38,7 +38,7 @@ prompt_for_vars() fi res_name=$(echo "$app_name" | tr [A-Z] [a-z]) - printf "Leader window resource name [%s]: " "$res_name" + printf "Main window resource name [%s]: " "$res_name" IFS= read -r pres_name if [ "$pres_name" ]; then res_name="$pres_name" @@ -92,8 +92,7 @@ Option summary App name: $app_name App version: $app_version App directory: $full_app_dir -Leader window resource name: $res_name ($res_name.$app_name) -Main window resource name: mainwin.$app_name +Main window resource name: $res_name ($res_name.$app_name) Author: $author_name Author's Email: $author_email Copyright years: $copy_years