Merge pull request #528 from bebehei/various

Various Improvements
This commit is contained in:
Nikos Tsipinakis 2018-07-11 13:09:08 +03:00 committed by GitHub
commit 6d0e20e40b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 190 additions and 196 deletions

View File

@ -124,7 +124,7 @@ static void on_get_capabilities(GDBusConnection *connection,
g_variant_builder_add(builder, "s", "body-markup");
value = g_variant_new("(as)", builder);
g_variant_builder_unref(builder);
g_clear_pointer(&builder, g_variant_builder_unref);
g_dbus_method_invocation_return_value(invocation, value);
g_dbus_connection_flush(connection, NULL, NULL, NULL);
@ -133,23 +133,10 @@ static void on_get_capabilities(GDBusConnection *connection,
static notification *dbus_message_to_notification(const gchar *sender, GVariant *parameters)
{
gchar *appname = NULL;
guint replaces_id = 0;
gchar *icon = NULL;
gchar *summary = NULL;
gchar *body = NULL;
Actions *actions = g_malloc0(sizeof(Actions));
gint timeout = -1;
notification *n = notification_create();
/* hints */
gint urgency = 1;
gint progress = -1;
gboolean transient = 0;
gchar *fgcolor = NULL;
gchar *bgcolor = NULL;
gchar *frcolor = NULL;
gchar *category = NULL;
RawImage *raw_icon = NULL;
n->actions = g_malloc0(sizeof(Actions));
n->dbus_client = g_strdup(sender);
{
GVariantIter *iter = g_variant_iter_new(parameters);
@ -161,65 +148,65 @@ static notification *dbus_message_to_notification(const gchar *sender, GVariant
switch (idx) {
case 0:
if (g_variant_is_of_type(content, G_VARIANT_TYPE_STRING))
appname = g_variant_dup_string(content, NULL);
n->appname = g_variant_dup_string(content, NULL);
break;
case 1:
if (g_variant_is_of_type(content, G_VARIANT_TYPE_UINT32))
replaces_id = g_variant_get_uint32(content);
n->id = g_variant_get_uint32(content);
break;
case 2:
if (g_variant_is_of_type(content, G_VARIANT_TYPE_STRING))
icon = g_variant_dup_string(content, NULL);
n->icon = g_variant_dup_string(content, NULL);
break;
case 3:
if (g_variant_is_of_type(content, G_VARIANT_TYPE_STRING))
summary = g_variant_dup_string(content, NULL);
n->summary = g_variant_dup_string(content, NULL);
break;
case 4:
if (g_variant_is_of_type(content, G_VARIANT_TYPE_STRING))
body = g_variant_dup_string(content, NULL);
n->body = g_variant_dup_string(content, NULL);
break;
case 5:
if (g_variant_is_of_type(content, G_VARIANT_TYPE_STRING_ARRAY))
actions->actions = g_variant_dup_strv(content, &(actions->count));
n->actions->actions = g_variant_dup_strv(content, &(n->actions->count));
break;
case 6:
if (g_variant_is_of_type(content, G_VARIANT_TYPE_DICTIONARY)) {
dict_value = g_variant_lookup_value(content, "urgency", G_VARIANT_TYPE_BYTE);
if (dict_value) {
urgency = g_variant_get_byte(dict_value);
n->urgency = g_variant_get_byte(dict_value);
g_variant_unref(dict_value);
}
dict_value = g_variant_lookup_value(content, "fgcolor", G_VARIANT_TYPE_STRING);
if (dict_value) {
fgcolor = g_variant_dup_string(dict_value, NULL);
n->colors[ColFG] = g_variant_dup_string(dict_value, NULL);
g_variant_unref(dict_value);
}
dict_value = g_variant_lookup_value(content, "bgcolor", G_VARIANT_TYPE_STRING);
if (dict_value) {
bgcolor = g_variant_dup_string(dict_value, NULL);
n->colors[ColBG] = g_variant_dup_string(dict_value, NULL);
g_variant_unref(dict_value);
}
dict_value = g_variant_lookup_value(content, "frcolor", G_VARIANT_TYPE_STRING);
if (dict_value) {
frcolor = g_variant_dup_string(dict_value, NULL);
n->colors[ColFrame] = g_variant_dup_string(dict_value, NULL);
g_variant_unref(dict_value);
}
dict_value = g_variant_lookup_value(content, "category", G_VARIANT_TYPE_STRING);
if (dict_value) {
category = g_variant_dup_string(dict_value, NULL);
n->category = g_variant_dup_string(dict_value, NULL);
g_variant_unref(dict_value);
}
dict_value = g_variant_lookup_value(content, "image-path", G_VARIANT_TYPE_STRING);
if (dict_value) {
g_free(icon);
icon = g_variant_dup_string(dict_value, NULL);
g_free(n->icon);
n->icon = g_variant_dup_string(dict_value, NULL);
g_variant_unref(dict_value);
}
@ -229,7 +216,7 @@ static notification *dbus_message_to_notification(const gchar *sender, GVariant
if (!dict_value)
dict_value = g_variant_lookup_value(content, "icon_data", G_VARIANT_TYPE("(iiibiiay)"));
if (dict_value) {
raw_icon = get_raw_image_from_data_hint(dict_value);
n->raw_icon = get_raw_image_from_data_hint(dict_value);
g_variant_unref(dict_value);
}
@ -240,28 +227,28 @@ static notification *dbus_message_to_notification(const gchar *sender, GVariant
* So let's check for int and boolean until notify-send is fixed.
*/
if((dict_value = g_variant_lookup_value(content, "transient", G_VARIANT_TYPE_BOOLEAN))) {
transient = g_variant_get_boolean(dict_value);
n->transient = g_variant_get_boolean(dict_value);
g_variant_unref(dict_value);
} else if((dict_value = g_variant_lookup_value(content, "transient", G_VARIANT_TYPE_UINT32))) {
transient = g_variant_get_uint32(dict_value) > 0;
n->transient = g_variant_get_uint32(dict_value) > 0;
g_variant_unref(dict_value);
} else if((dict_value = g_variant_lookup_value(content, "transient", G_VARIANT_TYPE_INT32))) {
transient = g_variant_get_int32(dict_value) > 0;
n->transient = g_variant_get_int32(dict_value) > 0;
g_variant_unref(dict_value);
}
if((dict_value = g_variant_lookup_value(content, "value", G_VARIANT_TYPE_INT32))) {
progress = g_variant_get_int32(dict_value);
n->progress = g_variant_get_int32(dict_value);
g_variant_unref(dict_value);
} else if((dict_value = g_variant_lookup_value(content, "value", G_VARIANT_TYPE_UINT32))) {
progress = g_variant_get_uint32(dict_value);
n->progress = g_variant_get_uint32(dict_value);
g_variant_unref(dict_value);
}
}
break;
case 7:
if (g_variant_is_of_type(content, G_VARIANT_TYPE_INT32))
timeout = g_variant_get_int32(content);
n->timeout = g_variant_get_int32(content) * 1000;
break;
}
g_variant_unref(content);
@ -273,30 +260,8 @@ static notification *dbus_message_to_notification(const gchar *sender, GVariant
fflush(stdout);
notification *n = notification_create();
n->id = replaces_id;
n->appname = appname;
n->summary = summary;
n->body = body;
n->icon = icon;
n->raw_icon = raw_icon;
n->timeout = timeout < 0 ? -1 : timeout * 1000;
n->progress = progress;
n->urgency = urgency;
n->category = category;
n->dbus_client = g_strdup(sender);
n->transient = transient;
if (actions->count < 1) {
actions_free(actions);
actions = NULL;
}
n->actions = actions;
n->colors[ColFG] = fgcolor;
n->colors[ColBG] = bgcolor;
n->colors[ColFrame] = frcolor;
if (n->actions->count < 1)
g_clear_pointer(&n->actions, actions_free);
notification_init(n);
return n;
@ -484,8 +449,7 @@ static int dbus_get_fdn_daemon_info(GDBusConnection *connection,
if (error) {
/* Ignore the error, we may still be able to retrieve the PID */
g_error_free(error);
error = NULL;
g_clear_pointer(&error, g_error_free);
} else {
g_variant_get(daemoninfo, "(ssss)", name, vendor, NULL, NULL);
}
@ -617,8 +581,7 @@ int initdbus(void)
void dbus_tear_down(int owner_id)
{
if (introspection_data)
g_dbus_node_info_unref(introspection_data);
g_clear_pointer(&introspection_data, g_dbus_node_info_unref);
g_bus_unown_name(owner_id);
}

View File

@ -625,10 +625,11 @@ void draw(void)
bool first = true;
for (GSList *iter = layouts; iter; iter = iter->next) {
if (iter->next)
dim = layout_render(image_surface, iter->data, iter->next->data, dim, first, iter->next == NULL);
else
dim = layout_render(image_surface, iter->data, NULL, dim, first, iter->next == NULL);
colored_layout *cl_this = iter->data;
colored_layout *cl_next = iter->next ? iter->next->data : NULL;
dim = layout_render(image_surface, cl_this, cl_next, dim, first, !cl_next);
first = false;
}

View File

@ -176,7 +176,7 @@ int dunst_main(int argc, char *argv[])
run(NULL);
g_main_loop_run(mainloop);
g_main_loop_unref(mainloop);
g_clear_pointer(&mainloop, g_main_loop_unref);
/* remove signal handler watches */
g_source_remove(pause_src);

View File

@ -13,7 +13,7 @@
static char *markup_quote(char *str)
{
assert(str != NULL);
assert(str);
str = string_replace_all("&", "&amp;", str);
str = string_replace_all("\"", "&quot;", str);
@ -26,7 +26,7 @@ static char *markup_quote(char *str)
static char *markup_unquote(char *str)
{
assert(str != NULL);
assert(str);
str = string_replace_all("&quot;", "\"", str);
str = string_replace_all("&apos;", "'", str);
@ -39,7 +39,7 @@ static char *markup_unquote(char *str)
static char *markup_br2nl(char *str)
{
assert(str != NULL);
assert(str);
str = string_replace_all("<br>", "\n", str);
str = string_replace_all("<br/>", "\n", str);
@ -230,9 +230,8 @@ void markup_strip_img(char **str, char **urls)
*/
char *markup_strip(char *str)
{
if (str == NULL) {
if (!str)
return NULL;
}
/* strip all tags */
string_strip_delimited(str, '<', '>');
@ -249,9 +248,8 @@ char *markup_strip(char *str)
*/
char *markup_transform(char *str, enum markup_mode markup_mode)
{
if (str == NULL) {
if (!str)
return NULL;
}
switch (markup_mode) {
case MARKUP_NULL:

View File

@ -193,7 +193,7 @@ void dispatch_menu_result(const char *input)
*/
void context_menu(void)
{
if (settings.dmenu_cmd == NULL) {
if (!settings.dmenu_cmd) {
LOG_C("Unable to open dmenu: No dmenu command set.");
return;
}

View File

@ -42,10 +42,7 @@ const char *enum_to_string_fullscreen(enum behavior_fullscreen in)
}
}
/*
* print a human readable representation
* of the given notification to stdout.
*/
/* see notification.h */
void notification_print(notification *n)
{
//TODO: use logging info for this
@ -64,6 +61,7 @@ void notification_print(notification *n)
printf("\tbg: %s\n", n->colors[ColBG]);
printf("\tframe: %s\n", n->colors[ColFrame]);
printf("\tfullscreen: %s\n", enum_to_string_fullscreen(n->fullscreen));
printf("\tprogress: %d\n", n->progress);
printf("\tid: %d\n", n->id);
if (n->urls) {
char *urls = string_replace_all("\n", "\t\t\n", g_strdup(n->urls));
@ -88,19 +86,16 @@ void notification_print(notification *n)
printf("}\n");
}
/*
* Run the script associated with the
* given notification.
*/
/* see notification.h */
void notification_run_script(notification *n)
{
if (!n->script || strlen(n->script) < 1)
return;
char *appname = n->appname ? n->appname : "";
char *summary = n->summary ? n->summary : "";
char *body = n->body ? n->body : "";
char *icon = n->icon ? n->icon : "";
const char *appname = n->appname ? n->appname : "";
const char *summary = n->summary ? n->summary : "";
const char *body = n->body ? n->body : "";
const char *icon = n->icon ? n->icon : "";
const char *urgency = notification_urgency_to_string(n->urgency);
@ -133,7 +128,7 @@ void notification_run_script(notification *n)
/*
* Helper function to convert an urgency to a string
*/
const char *notification_urgency_to_string(enum urgency urgency)
const char *notification_urgency_to_string(const enum urgency urgency)
{
switch (urgency) {
case URG_NONE:
@ -149,18 +144,9 @@ const char *notification_urgency_to_string(enum urgency urgency)
}
}
/*
* Helper function to compare to given
* notifications.
*/
int notification_cmp(const void *va, const void *vb)
/* see notification.h */
int notification_cmp(const notification *a, const notification *b)
{
notification *a = (notification *) va;
notification *b = (notification *) vb;
if (!settings.sort)
return 1;
if (a->urgency != b->urgency) {
return b->urgency - a->urgency;
} else {
@ -168,20 +154,23 @@ int notification_cmp(const void *va, const void *vb)
}
}
/*
* Wrapper for notification_cmp to match glib's
* compare functions signature.
*/
/* see notification.h */
int notification_cmp_data(const void *va, const void *vb, void *data)
{
return notification_cmp(va, vb);
notification *a = (notification *) va;
notification *b = (notification *) vb;
if (!settings.sort)
return 1;
return notification_cmp(a, b);
}
int notification_is_duplicate(const notification *a, const notification *b)
{
//Comparing raw icons is not supported, assume they are not identical
if (settings.icon_position != icons_off
&& (a->raw_icon != NULL || b->raw_icon != NULL))
&& (a->raw_icon || b->raw_icon))
return false;
return strcmp(a->appname, b->appname) == 0
@ -191,10 +180,7 @@ int notification_is_duplicate(const notification *a, const notification *b)
&& a->urgency == b->urgency;
}
/*
* Free the actions element
* @a: (nullable): Pointer to #Actions
*/
/* see notification.h */
void actions_free(Actions *a)
{
if (!a)
@ -205,10 +191,7 @@ void actions_free(Actions *a)
g_free(a);
}
/*
* Free a #RawImage
* @i: (nullable): pointer to #RawImage
*/
/* see notification.h */
void rawimage_free(RawImage *i)
{
if (!i)
@ -218,12 +201,12 @@ void rawimage_free(RawImage *i)
g_free(i);
}
/*
* Free the memory used by the given notification.
*/
/* see notification.h */
void notification_free(notification *n)
{
assert(n != NULL);
if (!n)
return;
g_free(n->appname);
g_free(n->summary);
g_free(n->body);
@ -243,14 +226,7 @@ void notification_free(notification *n)
g_free(n);
}
/*
* Replace the two chars where **needle points
* with a quoted "replacement", according to the markup settings.
*
* The needle is a double pointer and gets updated upon return
* to point to the first char, which occurs after replacement.
*
*/
/* see notification.h */
void notification_replace_single_field(char **haystack,
char **needle,
const char *replacement,
@ -274,14 +250,7 @@ void notification_replace_single_field(char **haystack,
g_free(input);
}
/*
* Create notification struct and initialise all fields with either
* - the default (if it's not needed to be freed later)
* - its undefined representation (NULL, -1)
*
* This function is guaranteed to return a valid pointer.
* @Returns: The generated notification
*/
/* see notification.h */
notification *notification_create(void)
{
notification *n = g_malloc0(sizeof(notification));
@ -304,12 +273,7 @@ notification *notification_create(void)
return n;
}
/*
* Sanitize values of notification, apply all matching rules
* and generate derived fields.
*
* @n: the notification to sanitize
*/
/* see notification.h */
void notification_init(notification *n)
{
/* default to empty string to avoid further NULL faults */
@ -557,11 +521,7 @@ void notification_update_text_to_render(notification *n)
n->text_to_render = buf;
}
/*
* If the notification has exactly one action, or one is marked as default,
* invoke it. If there are multiple and no default, open the context menu. If
* there are no actions, proceed similarly with urls.
*/
/* see notification.h */
void notification_do_action(notification *n)
{
if (n->actions) {
@ -578,10 +538,10 @@ void notification_do_action(notification *n)
context_menu();
} else if (n->urls) {
if (strstr(n->urls, "\n") == NULL)
open_browser(n->urls);
else
if (strstr(n->urls, "\n"))
context_menu();
else
open_browser(n->urls);
}
}

View File

@ -84,24 +84,90 @@ typedef struct _notification {
char *urls; /**< urllist delimited by '\\n' */
} notification;
/**
* Create notification struct and initialise all fields with either
* - the default (if it's not needed to be freed later)
* - its undefined representation (NULL, -1)
*
* This function is guaranteed to return a valid pointer.
* @returns The generated notification
*/
notification *notification_create(void);
/**
* Sanitize values of notification, apply all matching rules
* and generate derived fields.
*
* @param n: the notification to sanitize
*/
void notification_init(notification *n);
/**
* Free the actions structure
*
* @param a (nullable): Pointer to #Actions
*/
void actions_free(Actions *a);
/**
* Free a #RawImage
*
* @param i (nullable): pointer to #RawImage
*/
void rawimage_free(RawImage *i);
/**
* Free the memory used by the given notification.
*
* @param n (nullable): pointer to #notification
*/
void notification_free(notification *n);
int notification_cmp(const void *a, const void *b);
int notification_cmp_data(const void *a, const void *b, void *data);
/**
* Helper function to compare two given notifications.
*/
int notification_cmp(const notification *a, const notification *b);
/**
* Wrapper for notification_cmp to match glib's
* compare functions signature.
*/
int notification_cmp_data(const void *va, const void *vb, void *data);
int notification_is_duplicate(const notification *a, const notification *b);
/**
* Run the script associated with the
* given notification.
*/
void notification_run_script(notification *n);
/**
* print a human readable representation
* of the given notification to stdout.
*/
void notification_print(notification *n);
/**
* Replace the two chars where **needle points
* with a quoted "replacement", according to the markup settings.
*
* The needle is a double pointer and gets updated upon return
* to point to the first char, which occurs after replacement.
*/
void notification_replace_single_field(char **haystack,
char **needle,
const char *replacement,
enum markup_mode markup_mode);
void notification_update_text_to_render(notification *n);
/**
* If the notification has exactly one action, or one is marked as default,
* invoke it. If there are multiple and no default, open the context menu. If
* there are no actions, proceed similarly with urls.
*/
void notification_do_action(notification *n);
const char *notification_urgency_to_string(enum urgency urgency);
const char *notification_urgency_to_string(const enum urgency urgency);
/**
* Return the string representation for fullscreen behavior

View File

@ -66,9 +66,8 @@ void free_ini(void)
g_free(sections[i].entries);
g_free(sections[i].name);
}
g_free(sections);
g_clear_pointer(&sections, g_free);
section_count = 0;
sections = NULL;
}
section_t *get_section(const char *name)
@ -84,9 +83,8 @@ section_t *get_section(const char *name)
void add_entry(const char *section_name, const char *key, const char *value)
{
section_t *s = get_section(section_name);
if (s == NULL) {
if (!s)
s = new_section(section_name);
}
s->entry_count++;
int len = s->entry_count;
@ -139,19 +137,19 @@ gint64 ini_get_time(const char *section, const char *key, gint64 def)
int ini_get_int(const char *section, const char *key, int def)
{
const char *value = get_value(section, key);
if (value == NULL)
return def;
else
if (value)
return atoi(value);
else
return def;
}
double ini_get_double(const char *section, const char *key, double def)
{
const char *value = get_value(section, key);
if (value == NULL)
return def;
else
if (value)
return atof(value);
else
return def;
}
bool ini_is_set(const char *ini_section, const char *ini_key)
@ -164,9 +162,8 @@ const char *next_section(const char *section)
if (section_count == 0)
return NULL;
if (section == NULL) {
if (!section)
return sections[0].name;
}
for (int i = 0; i < section_count; i++) {
if (strcmp(section, sections[i].name) == 0) {
@ -182,9 +179,7 @@ const char *next_section(const char *section)
int ini_get_bool(const char *section, const char *key, int def)
{
const char *value = get_value(section, key);
if (value == NULL)
return def;
else {
if (value) {
switch (value[0]) {
case 'y':
case 'Y':
@ -201,6 +196,8 @@ int ini_get_bool(const char *section, const char *key, int def)
default:
return def;
}
} else {
return def;
}
}
@ -351,10 +348,10 @@ char *cmdline_get_string(const char *key, const char *def, const char *descripti
if (str)
return g_strdup(str);
if (def == NULL)
return NULL;
else
if (def)
return g_strdup(def);
else
return NULL;
}
char *cmdline_get_path(const char *key, const char *def, const char *description)
@ -386,10 +383,10 @@ int cmdline_get_int(const char *key, int def, const char *description)
cmdline_usage_append(key, "int", description);
const char *str = cmdline_get_value(key);
if (str == NULL)
return def;
else
if (str)
return atoi(str);
else
return def;
}
double cmdline_get_double(const char *key, double def, const char *description)
@ -397,10 +394,10 @@ double cmdline_get_double(const char *key, double def, const char *description)
cmdline_usage_append(key, "double", description);
const char *str = cmdline_get_value(key);
if (str == NULL)
return def;
else
if (str)
return atof(str);
else
return def;
}
int cmdline_get_bool(const char *key, int def, const char *description)

View File

@ -27,8 +27,7 @@ void rule_apply(rule_t *r, notification *n)
if (r->new_icon) {
g_free(n->icon);
n->icon = g_strdup(r->new_icon);
rawimage_free(n->raw_icon);
n->raw_icon = NULL;
g_clear_pointer(&n->raw_icon, rawimage_free);
}
if (r->fg) {
g_free(n->colors[ColFG]);

View File

@ -77,7 +77,7 @@ void load_settings(char *cmdline_config_path)
xdgInitHandle(&xdg);
if (cmdline_config_path != NULL) {
if (cmdline_config_path) {
if (0 == strcmp(cmdline_config_path, "-")) {
config_file = stdin;
} else {
@ -88,14 +88,14 @@ void load_settings(char *cmdline_config_path)
DIE("Cannot find config file: '%s'", cmdline_config_path);
}
}
if (config_file == NULL) {
if (!config_file) {
config_file = xdgConfigOpen("dunst/dunstrc", "r", &xdg);
}
if (config_file == NULL) {
if (!config_file) {
/* Fall back to just "dunstrc", which was used before 2013-06-23
* (before v0.2). */
config_file = xdgConfigOpen("dunstrc", "r", &xdg);
if (config_file == NULL) {
if (!config_file) {
LOG_W("No dunstrc found.");
xdgWipeHandle(&xdg);
}
@ -669,7 +669,7 @@ void load_settings(char *cmdline_config_path)
r = match;
}
if (r == NULL) {
if (!r) {
r = g_malloc(sizeof(rule_t));
rule_init(r);
rules = g_slist_insert(rules, r, -1);
@ -689,7 +689,7 @@ void load_settings(char *cmdline_config_path)
"markup", NULL
);
if (c != NULL) {
if (c) {
r->markup = parse_markup_mode(c);
g_free(c);
}

View File

@ -14,7 +14,7 @@
char *string_replace_char(char needle, char replacement, char *haystack)
{
char *current = haystack;
while ((current = strchr(current, needle)) != NULL)
while ((current = strchr(current, needle)))
*current++ = replacement;
return haystack;
}
@ -49,9 +49,8 @@ char *string_replace(const char *needle, const char *replacement, char *haystack
{
char *start;
start = strstr(haystack, needle);
if (start == NULL) {
if (!start)
return haystack;
}
return string_replace_at(haystack, (start - haystack), strlen(needle), replacement);
}
@ -70,7 +69,7 @@ char *string_replace_all(const char *needle, const char *replacement, char *hays
start = strstr(haystack, needle);
repl_len = strlen(replacement);
while (start != NULL) {
while (start) {
needle_pos = start - haystack;
haystack = string_replace_at(haystack, needle_pos, needle_len, replacement);
start = strstr(haystack + needle_pos + repl_len, needle);

View File

@ -46,7 +46,7 @@ static double get_xft_dpi_value(void)
XrmInitialize();
char *xRMS = XResourceManagerString(xctx.dpy);
if (xRMS == NULL) {
if (!xRMS) {
dpi = 0;
return 0;
}
@ -144,10 +144,13 @@ static int autodetect_dpi(screen_info *scr)
void screen_check_event(XEvent event)
{
if (event.type == randr_event_base + RRScreenChangeNotify)
if (event.type == randr_event_base + RRScreenChangeNotify) {
LOG_D("XEvent: processing 'RRScreenChangeNotify'");
randr_update();
else
LOG_D("XEvent: Ignored '%d'", event.type);
} else {
LOG_D("XEvent: Ignoring '%d'", event.type);
}
}
void xinerama_update(void)

View File

@ -274,21 +274,23 @@ gboolean x_mainloop_fd_dispatch(GSource *source, GSourceFunc callback, gpointer
unsigned int state;
while (XPending(xctx.dpy) > 0) {
XNextEvent(xctx.dpy, &ev);
LOG_D("XEvent: processing '%d'", ev.type);
switch (ev.type) {
case Expose:
LOG_D("XEvent: processing 'Expose'");
if (ev.xexpose.count == 0 && win->visible) {
draw();
}
break;
case ButtonRelease:
LOG_D("XEvent: processing 'ButtonRelease'");
if (ev.xbutton.window == win->xwin) {
x_handle_click(ev);
wake_up();
}
break;
case KeyPress:
LOG_D("XEvent: processing 'KeyPress'");
state = ev.xkey.state;
/* NumLock is also encoded in the state. Remove it. */
state &= ~x_numlock_mod();
@ -325,15 +327,21 @@ gboolean x_mainloop_fd_dispatch(GSource *source, GSourceFunc callback, gpointer
}
break;
case FocusIn:
LOG_D("XEvent: processing 'FocusIn'");
wake_up();
break;
case FocusOut:
LOG_D("XEvent: processing 'FocusOut'");
wake_up();
break;
case CreateNotify:
LOG_D("XEvent: processing 'CreateNotify'");
if (win->visible &&
ev.xcreatewindow.override_redirect == 0)
XRaiseWindow(xctx.dpy, win->xwin);
break;
case PropertyNotify:
LOG_D("XEvent: processing 'PropertyNotify'");
fullscreen_now = have_fullscreen_window();
scr = get_active_screen();
@ -815,7 +823,7 @@ static void x_shortcut_ungrab(keyboard_shortcut *ks)
*/
static void x_shortcut_init(keyboard_shortcut *ks)
{
if (ks == NULL || ks->str == NULL)
if (!ks|| !ks->str)
return;
if (!strcmp(ks->str, "none") || (!strcmp(ks->str, ""))) {

View File

@ -279,7 +279,7 @@ TEST test_option_get_bool(void)
SUITE(suite_option_parser)
{
FILE *config_file = fopen("data/test-ini", "r");
if (config_file == NULL) {
if (!config_file) {
fputs("\nTest config file 'data/test-ini' couldn't be opened, failing.\n", stderr);
exit(1);
}