Add an option parser
On one hand, getopt (in particular the -o suboption syntax) sucks on the server side, and on the client side we would like to avoid the glib dependency. We can roll out own option parser and solve both problems and save a few lines of code total.
This commit is contained in:
+3
-2
@@ -57,8 +57,9 @@ libtoytoolkit_a_SOURCES = \
|
||||
cairo-util.c \
|
||||
cairo-util.h
|
||||
|
||||
toolkit_libs = \
|
||||
libtoytoolkit.a \
|
||||
toolkit_libs = \
|
||||
libtoytoolkit.a \
|
||||
../shared/libconfig-parser.la \
|
||||
$(CLIENT_LIBS) $(CAIRO_EGL_LIBS) -lrt -lm
|
||||
|
||||
flower_SOURCES = flower.c
|
||||
|
||||
+1
-1
@@ -164,7 +164,7 @@ main(int argc, char *argv[])
|
||||
struct display *display;
|
||||
struct clickdot *clickdot;
|
||||
|
||||
display = display_create(&argc, &argv, NULL);
|
||||
display = display_create(argc, argv);
|
||||
if (display == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
@@ -707,7 +707,7 @@ int main(int argc, char *argv[])
|
||||
desktop.unlock_task.run = unlock_dialog_finish;
|
||||
wl_list_init(&desktop.outputs);
|
||||
|
||||
desktop.display = display_create(&argc, &argv, NULL);
|
||||
desktop.display = display_create(argc, argv);
|
||||
if (desktop.display == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+1
-1
@@ -561,7 +561,7 @@ main(int argc, char *argv[])
|
||||
{
|
||||
struct display *d;
|
||||
|
||||
d = display_create(&argc, &argv, NULL);
|
||||
d = display_create(argc, argv);
|
||||
if (d == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+17
-30
@@ -315,36 +315,20 @@ eventdemo_create(struct display *d)
|
||||
}
|
||||
/**
|
||||
* \brief command line options for eventdemo
|
||||
*
|
||||
* see
|
||||
* http://developer.gimp.org/api/2.0/glib/glib-Commandline-option-parser.html
|
||||
*/
|
||||
static const GOptionEntry option_entries[] = {
|
||||
{"title", 0, 0, G_OPTION_ARG_STRING,
|
||||
&title, "Set the window title to TITLE", "TITLE"},
|
||||
{"width", 'w', 0, G_OPTION_ARG_INT,
|
||||
&width, "Set the window's width to W", "W"},
|
||||
{"height", 'h', 0, G_OPTION_ARG_INT,
|
||||
&height, "Set the window's height to H", "H"},
|
||||
{"maxwidth", 0, 0, G_OPTION_ARG_INT,
|
||||
&width_max, "Set the window's maximum width to W", "W"},
|
||||
{"maxheight", 0, 0, G_OPTION_ARG_INT,
|
||||
&height_max, "Set the window's maximum height to H", "H"},
|
||||
{"noborder", 'b', 0, G_OPTION_ARG_NONE,
|
||||
&noborder, "Don't draw window borders", 0},
|
||||
{"log-redraw", 0, 0, G_OPTION_ARG_NONE,
|
||||
&log_redraw, "Log redraw events to stdout", 0},
|
||||
{"log-resize", 0, 0, G_OPTION_ARG_NONE,
|
||||
&log_resize, "Log resize events to stdout", 0},
|
||||
{"log-focus", 0, 0, G_OPTION_ARG_NONE,
|
||||
&log_focus, "Log keyboard focus events to stdout", 0},
|
||||
{"log-key", 0, 0, G_OPTION_ARG_NONE,
|
||||
&log_key, "Log key events to stdout", 0},
|
||||
{"log-button", 0, 0, G_OPTION_ARG_NONE,
|
||||
&log_button, "Log button events to stdout", 0},
|
||||
{"log-motion", 0, 0, G_OPTION_ARG_NONE,
|
||||
&log_motion, "Log motion events to stdout", 0},
|
||||
{NULL}
|
||||
static const struct weston_option eventdemo_options[] = {
|
||||
{ WESTON_OPTION_STRING, "title", 0, &title },
|
||||
{ WESTON_OPTION_INTEGER, "width", 'w', &width },
|
||||
{ WESTON_OPTION_INTEGER, "height", 'h', &height },
|
||||
{ WESTON_OPTION_INTEGER, "max-width", 0, &width_max },
|
||||
{ WESTON_OPTION_INTEGER, "max-height", 0, &height_max },
|
||||
{ WESTON_OPTION_BOOLEAN, "no-border", 'b', &noborder },
|
||||
{ WESTON_OPTION_BOOLEAN, "log-redraw", '0', &log_redraw },
|
||||
{ WESTON_OPTION_BOOLEAN, "log-resize", '0', &log_resize },
|
||||
{ WESTON_OPTION_BOOLEAN, "log-focus", '0', &log_focus },
|
||||
{ WESTON_OPTION_BOOLEAN, "log-key", '0', &log_key },
|
||||
{ WESTON_OPTION_BOOLEAN, "log-button", '0', &log_button },
|
||||
{ WESTON_OPTION_BOOLEAN, "log-motion", '0', &log_motion },
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -357,8 +341,11 @@ main(int argc, char *argv[])
|
||||
struct display *d;
|
||||
struct eventdemo *e;
|
||||
|
||||
argc = parse_options(eventdemo_options,
|
||||
ARRAY_LENGTH(eventdemo_options), argc, argv);
|
||||
|
||||
/* Connect to the display and have the arguments parsed */
|
||||
d = display_create(&argc, &argv, option_entries);
|
||||
d = display_create(argc, argv);
|
||||
if (d == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+1
-1
@@ -168,7 +168,7 @@ int main(int argc, char *argv[])
|
||||
struct display *d;
|
||||
struct timeval tv;
|
||||
|
||||
d = display_create(&argc, &argv, NULL);
|
||||
d = display_create(argc, argv);
|
||||
if (d == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+1
-1
@@ -369,7 +369,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
struct display *d;
|
||||
|
||||
d = display_create(&argc, &argv, NULL);
|
||||
d = display_create(argc, argv);
|
||||
if (d == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+1
-5
@@ -220,17 +220,13 @@ image_create(struct display *display, const char *filename)
|
||||
return image;
|
||||
}
|
||||
|
||||
static const GOptionEntry option_entries[] = {
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct display *d;
|
||||
int i;
|
||||
|
||||
d = display_create(&argc, &argv, option_entries);
|
||||
d = display_create(argc, argv);
|
||||
if (d == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+1
-1
@@ -242,7 +242,7 @@ main(int argc, char *argv[])
|
||||
struct display *display;
|
||||
struct resizor *resizor;
|
||||
|
||||
display = display_create(&argc, &argv, NULL);
|
||||
display = display_create(argc, argv);
|
||||
if (display == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+1
-1
@@ -283,7 +283,7 @@ int main(int argc, char *argv[])
|
||||
struct display *d;
|
||||
int size;
|
||||
|
||||
d = display_create(&argc, &argv, NULL);
|
||||
d = display_create(argc, argv);
|
||||
if (d == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
@@ -316,7 +316,7 @@ int main(int argc, char *argv[])
|
||||
uint32_t id;
|
||||
struct tablet_shell *shell;
|
||||
|
||||
display = display_create(&argc, &argv, NULL);
|
||||
display = display_create(argc, argv);
|
||||
if (display == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+6
-5
@@ -2362,10 +2362,8 @@ terminal_run(struct terminal *terminal, const char *path)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const GOptionEntry option_entries[] = {
|
||||
{ "fullscreen", 'f', 0, G_OPTION_ARG_NONE,
|
||||
&option_fullscreen, "Run in fullscreen mode" },
|
||||
{ NULL }
|
||||
static const struct weston_option terminal_options[] = {
|
||||
{ WESTON_OPTION_BOOLEAN, "fullscreen", 'f', &option_fullscreen },
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
@@ -2374,7 +2372,10 @@ int main(int argc, char *argv[])
|
||||
struct terminal *terminal;
|
||||
const char *shell;
|
||||
|
||||
d = display_create(&argc, &argv, option_entries);
|
||||
argc = parse_options(terminal_options,
|
||||
ARRAY_LENGTH(terminal_options), argc, argv);
|
||||
|
||||
d = display_create(argc, argv);
|
||||
if (d == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+6
-5
@@ -252,10 +252,8 @@ view_create(struct display *display,
|
||||
|
||||
static int option_fullscreen;
|
||||
|
||||
static const GOptionEntry option_entries[] = {
|
||||
{ "fullscreen", 'f', 0, G_OPTION_ARG_NONE,
|
||||
&option_fullscreen, "Run in fullscreen mode" },
|
||||
{ NULL }
|
||||
static const struct weston_option view_options[] = {
|
||||
{ WESTON_OPTION_BOOLEAN, "fullscreen", 0, &option_fullscreen },
|
||||
};
|
||||
|
||||
int
|
||||
@@ -264,7 +262,10 @@ main(int argc, char *argv[])
|
||||
struct display *d;
|
||||
int i;
|
||||
|
||||
d = display_create(&argc, &argv, option_entries);
|
||||
argc = parse_options(view_options,
|
||||
ARRAY_LENGTH(view_options), argc, argv);
|
||||
|
||||
d = display_create(argc, argv);
|
||||
if (d == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return -1;
|
||||
|
||||
+7
-29
@@ -231,14 +231,10 @@ const char *option_xkb_layout = "us";
|
||||
const char *option_xkb_variant = "";
|
||||
const char *option_xkb_options = "";
|
||||
|
||||
static const GOptionEntry xkb_option_entries[] = {
|
||||
{ "xkb-layout", 0, 0, G_OPTION_ARG_STRING,
|
||||
&option_xkb_layout, "XKB Layout" },
|
||||
{ "xkb-variant", 0, 0, G_OPTION_ARG_STRING,
|
||||
&option_xkb_variant, "XKB Variant" },
|
||||
{ "xkb-options", 0, 0, G_OPTION_ARG_STRING,
|
||||
&option_xkb_options, "XKB Options" },
|
||||
{ NULL }
|
||||
static const struct weston_option xkb_options[] = {
|
||||
{ WESTON_OPTION_STRING, "xkb-layout", 0, &option_xkb_layout },
|
||||
{ WESTON_OPTION_STRING, "xkb-variant", 0, &option_xkb_variant },
|
||||
{ WESTON_OPTION_STRING, "xkb-options", 0, &option_xkb_options },
|
||||
};
|
||||
|
||||
static const cairo_user_data_key_t surface_data_key;
|
||||
@@ -2921,32 +2917,14 @@ handle_display_data(struct task *task, uint32_t events)
|
||||
}
|
||||
|
||||
struct display *
|
||||
display_create(int *argc, char **argv[], const GOptionEntry *option_entries)
|
||||
display_create(int argc, char *argv[])
|
||||
{
|
||||
struct display *d;
|
||||
GOptionContext *context;
|
||||
GOptionGroup *xkb_option_group;
|
||||
GError *error;
|
||||
|
||||
g_type_init();
|
||||
|
||||
context = g_option_context_new(NULL);
|
||||
if (option_entries)
|
||||
g_option_context_add_main_entries(context, option_entries, "Wayland View");
|
||||
|
||||
xkb_option_group = g_option_group_new("xkb",
|
||||
"Keyboard options",
|
||||
"Show all XKB options",
|
||||
NULL, NULL);
|
||||
g_option_group_add_entries(xkb_option_group, xkb_option_entries);
|
||||
g_option_context_add_group (context, xkb_option_group);
|
||||
|
||||
if (!g_option_context_parse(context, argc, argv, &error)) {
|
||||
fprintf(stderr, "option parsing failed: %s\n", error->message);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
g_option_context_free(context);
|
||||
argc = parse_options(xkb_options,
|
||||
ARRAY_LENGTH(xkb_options), argc, argv);
|
||||
|
||||
d = malloc(sizeof *d);
|
||||
if (d == NULL)
|
||||
|
||||
+2
-2
@@ -24,9 +24,9 @@
|
||||
#define _WINDOW_H_
|
||||
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
#include <glib.h>
|
||||
#include <wayland-client.h>
|
||||
#include <cairo.h>
|
||||
#include "../shared/config-parser.h"
|
||||
|
||||
struct window;
|
||||
struct widget;
|
||||
@@ -47,7 +47,7 @@ struct rectangle {
|
||||
};
|
||||
|
||||
struct display *
|
||||
display_create(int *argc, char **argv[], const GOptionEntry *option_entries);
|
||||
display_create(int argc, char *argv[]);
|
||||
|
||||
void
|
||||
display_destroy(struct display *display);
|
||||
|
||||
@@ -296,10 +296,8 @@ global_handler(struct wl_display *display, uint32_t id,
|
||||
}
|
||||
}
|
||||
|
||||
static const GOptionEntry option_entries[] = {
|
||||
{ "demo", 0, 0, G_OPTION_ARG_NONE, &demo_mode,
|
||||
"Run as a regular application, not a screensaver.", NULL },
|
||||
{ NULL }
|
||||
static const struct weston_option wscreensaver_options[] = {
|
||||
{ WESTON_OPTION_BOOLEAN, "demo", 0, &demo_mode },
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
@@ -309,7 +307,10 @@ int main(int argc, char *argv[])
|
||||
|
||||
init_frand();
|
||||
|
||||
d = display_create(&argc, &argv, option_entries);
|
||||
argc = parse_options(wscreensaver_options,
|
||||
ARRAY_LENGTH(wscreensaver_options), argc, argv);
|
||||
|
||||
d = display_create(argc, argv);
|
||||
if (d == NULL) {
|
||||
fprintf(stderr, "failed to create display: %m\n");
|
||||
return EXIT_FAILURE;
|
||||
|
||||
Reference in New Issue
Block a user