Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions openbox/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -2241,15 +2241,20 @@ void client_update_icons(ObClient *self)
while (i + 2 < num) { /* +2 is to make sure there is a w and h */
w = data[i++];
h = data[i++];
/* calculate the data size as guint64 to prevent integer
overflow due to invalid data */
guint64 size = w * h;
/* watch for the data being too small for the specified size,
or for zero sized icons. */
if (i + w*h > num || w == 0 || h == 0) {
i += w*h;
if (i + size > num || size < w || size < h) {
break;
} else if (w == 0 || h == 0) {
i += size;
continue;
}

/* convert it to the right bit order for ObRender */
for (j = 0; j < w*h; ++j)
for (j = 0; j < size; ++j)
data[i+j] =
(((data[i+j] >> 24) & 0xff) << RrDefaultAlphaOffset) +
(((data[i+j] >> 16) & 0xff) << RrDefaultRedOffset) +
Expand All @@ -2262,7 +2267,7 @@ void client_update_icons(ObClient *self)
else
RrImageAddFromData(img, &data[i], w, h);

i += w*h;
i += size;
}

g_free(data);
Expand Down Expand Up @@ -2306,7 +2311,7 @@ void client_update_icons(ObClient *self)
/* if the client has no icon at all, then we set a default icon onto it.
but, if it has parents, then one of them will have an icon already
*/
if (!self->icon_set && !self->parents) {
if (!self->icon_set && !self->parents && config_apply_default_icon) {
RrPixel32 *icon = ob_rr_theme->def_win_icon;
gulong *ldata; /* use a long here to satisfy OBT_PROP_SETA32 */

Expand Down
4 changes: 4 additions & 0 deletions openbox/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ gboolean config_theme_keepborder;
guint config_theme_window_list_icon_size;

gchar *config_title_layout;
gboolean config_apply_default_icon;

gboolean config_animate_iconify;

Expand Down Expand Up @@ -712,6 +713,8 @@ static void parse_theme(xmlNodePtr node, gpointer d)
config_theme_keepborder = obt_xml_node_bool(n);
if ((n = obt_xml_find_node(node, "animateIconify")))
config_animate_iconify = obt_xml_node_bool(n);
if ((n = obt_xml_find_node(node, "applyDefaultIcon")))
config_apply_default_icon = obt_xml_node_bool(n);
if ((n = obt_xml_find_node(node, "windowListIconSize"))) {
config_theme_window_list_icon_size = obt_xml_node_int(n);
if (config_theme_window_list_icon_size < 16)
Expand Down Expand Up @@ -1098,6 +1101,7 @@ void config_startup(ObtXmlInst *i)
config_title_layout = g_strdup("NLIMC");
config_theme_keepborder = TRUE;
config_theme_window_list_icon_size = 36;
config_apply_default_icon = TRUE;

config_font_activewindow = NULL;
config_font_inactivewindow = NULL;
Expand Down
2 changes: 2 additions & 0 deletions openbox/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ extern gchar *config_title_layout;
extern gboolean config_animate_iconify;
/*! Size of icons in focus switching dialogs */
extern guint config_theme_window_list_icon_size;
/*! Set a default icon for windows that lack one */
extern gboolean config_apply_default_icon;

/*! The font for the active window's title */
extern RrFont *config_font_activewindow;
Expand Down