projects
/
mikachu
/
openbox.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
5a1da74
)
Let the If action match window titles with GRegex
author
Mikael Magnusson
<mikachu@gmail.com>
Sat, 14 Aug 2010 23:36:10 +0000
(
01:36
+0200)
committer
Dana Jansens
<danakj@orodu.net>
Sun, 11 Aug 2013 17:38:16 +0000
(13:38 -0400)
openbox/actions/if.c
patch
|
blob
|
history
diff --git
a/openbox/actions/if.c
b/openbox/actions/if.c
index
35bda46
..
7087d6a
100644
(file)
--- a/
openbox/actions/if.c
+++ b/
openbox/actions/if.c
@@
-30,6
+30,8
@@
typedef struct {
guint desktop_number;
guint screendesktop_number;
GPatternSpec *matchtitle;
guint desktop_number;
guint screendesktop_number;
GPatternSpec *matchtitle;
+ GRegex *regextitle;
+ gchar *plaintitle;
GSList *thenacts;
GSList *elseacts;
} Options;
GSList *thenacts;
GSList *elseacts;
} Options;
@@
-91,9
+93,17
@@
static gpointer setup_func(xmlNodePtr node)
o->screendesktop_number = obt_xml_node_int(n);
}
if ((n = obt_xml_find_node(node, "title"))) {
o->screendesktop_number = obt_xml_node_int(n);
}
if ((n = obt_xml_find_node(node, "title"))) {
- gchar *s;
+ gchar *s
, *type = NULL
;
if ((s = obt_xml_node_string(n))) {
if ((s = obt_xml_node_string(n))) {
- o->matchtitle = g_pattern_spec_new(s);
+ if (!obt_xml_attr_string(n, "type", &type) ||
+ !g_ascii_strcasecmp(type, "pattern"))
+ {
+ o->matchtitle = g_pattern_spec_new(s);
+ } else if (type && !g_ascii_strcasecmp(type, "regex")) {
+ o->regextitle = g_regex_new(s, 0, 0, NULL);
+ } else if (type && !g_ascii_strcasecmp(type, "plain")) {
+ o->plaintitle = g_strdup(s);
+ }
g_free(s);
}
}
g_free(s);
}
}
@@
-136,6
+146,10
@@
static void free_func(gpointer options)
}
if (o->matchtitle)
g_pattern_spec_free(o->matchtitle);
}
if (o->matchtitle)
g_pattern_spec_free(o->matchtitle);
+ if (o->regextitle)
+ g_regex_unref(o->regextitle);
+ if (o->plaintitle)
+ g_free(o->plaintitle);
g_slice_free(Options, o);
}
g_slice_free(Options, o);
}
@@
-174,7
+188,11
@@
static gboolean run_func(ObActionsData *data, gpointer options)
(c->desktop == DESKTOP_ALL))) &&
(!o->screendesktop_number || screen_desktop == o->screendesktop_number - 1) &&
(!o->matchtitle ||
(c->desktop == DESKTOP_ALL))) &&
(!o->screendesktop_number || screen_desktop == o->screendesktop_number - 1) &&
(!o->matchtitle ||
- (g_pattern_match_string(o->matchtitle, c->original_title))))
+ (g_pattern_match_string(o->matchtitle, c->original_title))) &&
+ (!o->regextitle ||
+ (g_regex_match(o->regextitle, c->original_title, 0, NULL))) &&
+ (!o->plaintitle ||
+ (!strcmp(o->plaintitle, c->original_title))))
{
acts = o->thenacts;
}
{
acts = o->thenacts;
}