чување 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:
| M | app.h | | | 2 | -- |
| M | main.c | | | 47 | +++++++++++++++++++++-------------------------- |
| M | wmgen | | | 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