hack around bug in kmail etc. where SM_CLIENT_ID was set on the window,

2002-08-24  Havoc Pennington  <hp@redhat.com>

	* src/window.c (update_sm_hints): hack around bug in kmail etc.
	where SM_CLIENT_ID was set on the window, not the client leader.

	* src/theme.c (meta_frame_layout_calc_geometry): don't round
	corners unless we have enough frame to chop off.
This commit is contained in:
Havoc Pennington 2002-08-24 21:28:02 +00:00 committed by Havoc Pennington
parent b9002db37f
commit cbb4a91113
3 changed files with 58 additions and 10 deletions

View File

@ -1,3 +1,11 @@
2002-08-24 Havoc Pennington <hp@redhat.com>
* src/window.c (update_sm_hints): hack around bug in kmail etc.
where SM_CLIENT_ID was set on the window, not the client leader.
* src/theme.c (meta_frame_layout_calc_geometry): don't round
corners unless we have enough frame to chop off.
2002-08-24 Havoc Pennington <hp@redhat.com> 2002-08-24 Havoc Pennington <hp@redhat.com>
* src/util.c: translate some strings that should have been, and * src/util.c: translate some strings that should have been, and

View File

@ -567,12 +567,29 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
fgeom->title_rect.height = 0; fgeom->title_rect.height = 0;
} }
#define MIN_SIZE_FOR_ROUNDING 3
fgeom->top_left_corner_rounded = FALSE;
fgeom->top_right_corner_rounded = FALSE;
fgeom->bottom_left_corner_rounded = FALSE;
fgeom->bottom_right_corner_rounded = FALSE;
if (fgeom->top_height >= MIN_SIZE_FOR_ROUNDING)
{
if (fgeom->left_width >= MIN_SIZE_FOR_ROUNDING)
fgeom->top_left_corner_rounded = layout->top_left_corner_rounded; fgeom->top_left_corner_rounded = layout->top_left_corner_rounded;
if (fgeom->right_width >= MIN_SIZE_FOR_ROUNDING)
fgeom->top_right_corner_rounded = layout->top_right_corner_rounded; fgeom->top_right_corner_rounded = layout->top_right_corner_rounded;
fgeom->bottom_left_corner_rounded = layout->bottom_left_corner_rounded;
fgeom->bottom_right_corner_rounded = layout->bottom_right_corner_rounded;
} }
if (fgeom->bottom_height >= MIN_SIZE_FOR_ROUNDING)
{
if (fgeom->left_width >= MIN_SIZE_FOR_ROUNDING)
fgeom->bottom_left_corner_rounded = layout->bottom_left_corner_rounded;
if (fgeom->right_width >= MIN_SIZE_FOR_ROUNDING)
fgeom->bottom_right_corner_rounded = layout->bottom_right_corner_rounded;
}
}
MetaGradientSpec* MetaGradientSpec*
meta_gradient_spec_new (MetaGradientType type) meta_gradient_spec_new (MetaGradientType type)

View File

@ -4606,14 +4606,37 @@ update_sm_hints (MetaWindow *window)
window->sm_client_id = g_strdup (str); window->sm_client_id = g_strdup (str);
meta_XFree (str); meta_XFree (str);
} }
}
else
{
meta_verbose ("Didn't find a client leader for %s\n", window->desc);
if (!meta_prefs_get_disable_workarounds ())
{
/* Some broken apps (kdelibs fault?) set SM_CLIENT_ID on the app
* instead of the client leader
*/
char *str;
str = NULL;
if (meta_prop_get_latin1_string (window->display, window->xwindow,
window->display->atom_sm_client_id,
&str))
{
if (window->sm_client_id == NULL) /* first time through */
meta_warning (_("Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"),
window->desc);
window->sm_client_id = g_strdup (str);
meta_XFree (str);
}
}
}
meta_verbose ("Window %s client leader: 0x%lx SM_CLIENT_ID: '%s'\n", meta_verbose ("Window %s client leader: 0x%lx SM_CLIENT_ID: '%s'\n",
window->desc, window->xclient_leader, window->desc, window->xclient_leader,
window->sm_client_id ? window->sm_client_id : "(null)"); window->sm_client_id ? window->sm_client_id : "(null)");
} }
else
meta_verbose ("Didn't find a client leader for %s\n", window->desc);
}
static void static void
update_role (MetaWindow *window) update_role (MetaWindow *window)