mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
Compare commits
2 commits
70e5beb5ec
...
5f981226c2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f981226c2 | ||
|
|
2f96664670 |
5 changed files with 49 additions and 124 deletions
|
|
@ -1,12 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
||||||
#ifndef LABWC_ACTION_PROMPT_COMMAND_H
|
|
||||||
#define LABWC_ACTION_PROMPT_COMMAND_H
|
|
||||||
|
|
||||||
struct buf;
|
|
||||||
struct action;
|
|
||||||
struct theme;
|
|
||||||
|
|
||||||
void action_prompt_command(struct buf *buf, const char *format,
|
|
||||||
struct action *action, struct theme *theme);
|
|
||||||
|
|
||||||
#endif /* LABWC_ACTION_PROMPT_COMMAND_H */
|
|
||||||
|
|
@ -127,7 +127,9 @@ conf_data.set10('HAVE_RSVG', have_rsvg)
|
||||||
conf_data.set10('HAVE_LIBSFDO', have_libsfdo)
|
conf_data.set10('HAVE_LIBSFDO', have_libsfdo)
|
||||||
|
|
||||||
foreach sym : ['LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY', 'LIBINPUT_CONFIG_3FG_DRAG_ENABLED_3FG']
|
foreach sym : ['LIBINPUT_CONFIG_DRAG_LOCK_ENABLED_STICKY', 'LIBINPUT_CONFIG_3FG_DRAG_ENABLED_3FG']
|
||||||
conf_data.set10('HAVE_' + sym, cc.has_header_symbol('libinput.h', sym, dependencies: input))
|
has_sym = input.type_name() != 'internal' \
|
||||||
|
and cc.has_header_symbol('libinput.h', sym, dependencies: input)
|
||||||
|
conf_data.set10('HAVE_' + sym, has_sym)
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
if get_option('static_analyzer').enabled()
|
if get_option('static_analyzer').enabled()
|
||||||
|
|
|
||||||
|
|
@ -1,108 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
#define _POSIX_C_SOURCE 200809L
|
|
||||||
#include "action-prompt-command.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <wlr/util/log.h>
|
|
||||||
#include "action.h"
|
|
||||||
#include "common/buf.h"
|
|
||||||
#include "theme.h"
|
|
||||||
#include "translate.h"
|
|
||||||
|
|
||||||
enum {
|
|
||||||
LAB_PROMPT_NONE = 0,
|
|
||||||
LAB_PROMPT_MESSAGE,
|
|
||||||
LAB_PROMPT_NO,
|
|
||||||
LAB_PROMPT_YES,
|
|
||||||
LAB_PROMPT_BG_COL,
|
|
||||||
LAB_PROMPT_TEXT_COL,
|
|
||||||
|
|
||||||
LAB_PROMPT_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef void field_conversion_type(struct buf *buf, struct action *action,
|
|
||||||
struct theme *theme);
|
|
||||||
|
|
||||||
struct field_converter {
|
|
||||||
const char fmt_char;
|
|
||||||
field_conversion_type *fn;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* %m */
|
|
||||||
static void
|
|
||||||
set_message(struct buf *buf, struct action *action, struct theme *theme)
|
|
||||||
{
|
|
||||||
buf_add(buf, action_get_str(action, "message.prompt", "Choose wisely"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* %n */
|
|
||||||
static void
|
|
||||||
set_no(struct buf *buf, struct action *action, struct theme *theme)
|
|
||||||
{
|
|
||||||
buf_add(buf, _("No"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* %y */
|
|
||||||
static void
|
|
||||||
set_yes(struct buf *buf, struct action *action, struct theme *theme)
|
|
||||||
{
|
|
||||||
buf_add(buf, _("Yes"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* %b */
|
|
||||||
static void
|
|
||||||
set_bg_col(struct buf *buf, struct action *action, struct theme *theme)
|
|
||||||
{
|
|
||||||
buf_add_hex_color(buf, theme->osd_bg_color);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* %t */
|
|
||||||
static void
|
|
||||||
set_text_col(struct buf *buf, struct action *action, struct theme *theme)
|
|
||||||
{
|
|
||||||
buf_add_hex_color(buf, theme->osd_label_text_color);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct field_converter field_converter[LAB_PROMPT_COUNT] = {
|
|
||||||
[LAB_PROMPT_MESSAGE] = { 'm', set_message },
|
|
||||||
[LAB_PROMPT_NO] = { 'n', set_no },
|
|
||||||
[LAB_PROMPT_YES] = { 'y', set_yes },
|
|
||||||
[LAB_PROMPT_BG_COL] = { 'b', set_bg_col },
|
|
||||||
[LAB_PROMPT_TEXT_COL] = { 't', set_text_col },
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
action_prompt_command(struct buf *buf, const char *format,
|
|
||||||
struct action *action, struct theme *theme)
|
|
||||||
{
|
|
||||||
if (!format) {
|
|
||||||
wlr_log(WLR_ERROR, "missing format");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const char *p = format; *p; p++) {
|
|
||||||
/*
|
|
||||||
* If we're not on a conversion specifier (like %m) then just
|
|
||||||
* keep adding it to the buffer
|
|
||||||
*/
|
|
||||||
if (*p != '%') {
|
|
||||||
buf_add_char(buf, *p);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Process the %* conversion specifier */
|
|
||||||
++p;
|
|
||||||
|
|
||||||
bool found = false;
|
|
||||||
for (unsigned char i = 0; i < LAB_PROMPT_COUNT; i++) {
|
|
||||||
if (*p == field_converter[i].fmt_char) {
|
|
||||||
field_converter[i].fn(buf, action, theme);
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
wlr_log(WLR_ERROR,
|
|
||||||
"invalid prompt command conversion specifier '%c'", *p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
48
src/action.c
48
src/action.c
|
|
@ -10,7 +10,6 @@
|
||||||
#include <wlr/types/wlr_scene.h>
|
#include <wlr/types/wlr_scene.h>
|
||||||
#include <wlr/util/log.h>
|
#include <wlr/util/log.h>
|
||||||
#include "action-prompt-codes.h"
|
#include "action-prompt-codes.h"
|
||||||
#include "action-prompt-command.h"
|
|
||||||
#include "common/buf.h"
|
#include "common/buf.h"
|
||||||
#include "common/macros.h"
|
#include "common/macros.h"
|
||||||
#include "common/list.h"
|
#include "common/list.h"
|
||||||
|
|
@ -30,6 +29,7 @@
|
||||||
#include "regions.h"
|
#include "regions.h"
|
||||||
#include "ssd.h"
|
#include "ssd.h"
|
||||||
#include "theme.h"
|
#include "theme.h"
|
||||||
|
#include "translate.h"
|
||||||
#include "view.h"
|
#include "view.h"
|
||||||
#include "workspaces.h"
|
#include "workspaces.h"
|
||||||
|
|
||||||
|
|
@ -831,11 +831,55 @@ handle_view_destroy(struct wl_listener *listener, void *data)
|
||||||
prompt->view = NULL;
|
prompt->view = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_prompt_command(struct buf *buf, const char *format,
|
||||||
|
struct action *action, struct theme *theme)
|
||||||
|
{
|
||||||
|
assert(format);
|
||||||
|
|
||||||
|
for (const char *p = format; *p; p++) {
|
||||||
|
/*
|
||||||
|
* If we're not on a conversion specifier (like %m) then just
|
||||||
|
* keep adding it to the buffer
|
||||||
|
*/
|
||||||
|
if (*p != '%') {
|
||||||
|
buf_add_char(buf, *p);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Process the %* conversion specifier */
|
||||||
|
++p;
|
||||||
|
|
||||||
|
switch (*p) {
|
||||||
|
case 'm':
|
||||||
|
buf_add(buf, action_get_str(action,
|
||||||
|
"message.prompt", "Choose wisely"));
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
buf_add(buf, _("No"));
|
||||||
|
break;
|
||||||
|
case 'y':
|
||||||
|
buf_add(buf, _("Yes"));
|
||||||
|
break;
|
||||||
|
case 'b':
|
||||||
|
buf_add_hex_color(buf, theme->osd_bg_color);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
buf_add_hex_color(buf, theme->osd_label_text_color);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
wlr_log(WLR_ERROR,
|
||||||
|
"invalid prompt command conversion specifier '%c'", *p);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
action_prompt_create(struct view *view, struct server *server, struct action *action)
|
action_prompt_create(struct view *view, struct server *server, struct action *action)
|
||||||
{
|
{
|
||||||
struct buf command = BUF_INIT;
|
struct buf command = BUF_INIT;
|
||||||
action_prompt_command(&command, rc.prompt_command, action, rc.theme);
|
print_prompt_command(&command, rc.prompt_command, action, rc.theme);
|
||||||
|
|
||||||
wlr_log(WLR_INFO, "prompt command: '%s'", command.data);
|
wlr_log(WLR_INFO, "prompt command: '%s'", command.data);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
labwc_sources = files(
|
labwc_sources = files(
|
||||||
'action.c',
|
'action.c',
|
||||||
'action-prompt-command.c',
|
|
||||||
'buffer.c',
|
'buffer.c',
|
||||||
'debug.c',
|
'debug.c',
|
||||||
'desktop.c',
|
'desktop.c',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue