Be more conservative in detecting GTK theme changes. b=305970 r=caillon sr=bryner a=drivers

git-svn-id: svn://10.0.0.236/branches/MOZILLA_1_8_BRANCH@186347 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dbaron%dbaron.org
2005-12-21 01:38:20 +00:00
parent a69d48e93d
commit aa8dbc0a0d

View File

@@ -148,9 +148,9 @@ static gboolean visibility_notify_event_cb(GtkWidget *widget,
GdkEventVisibility *event);
static gboolean window_state_event_cb (GtkWidget *widget,
GdkEventWindowState *event);
static void style_set_cb (GtkWidget *widget,
GtkStyle *previous_style,
gpointer data);
static void theme_changed_cb (GtkSettings *settings,
GParamSpec *pspec,
nsWindow *data);
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
@@ -372,6 +372,10 @@ nsWindow::Destroy(void)
mIsDestroyed = PR_TRUE;
mCreated = PR_FALSE;
g_signal_handlers_disconnect_by_func(gtk_settings_get_default(),
(gpointer)G_CALLBACK(theme_changed_cb),
this);
// ungrab if required
nsCOMPtr<nsIWidget> rollupWidget = do_QueryReferent(gRollupWindow);
if (NS_STATIC_CAST(nsIWidget *, this) == rollupWidget.get()) {
@@ -1420,6 +1424,7 @@ nsWindow::OnDeleteEvent(GtkWidget *aWidget, GdkEventAny *aEvent)
void
nsWindow::OnEnterNotifyEvent(GtkWidget *aWidget, GdkEventCrossing *aEvent)
{
// XXXldb Is this the right test for embedding cases?
if (aEvent->subwindow != NULL)
return;
@@ -1437,6 +1442,7 @@ nsWindow::OnEnterNotifyEvent(GtkWidget *aWidget, GdkEventCrossing *aEvent)
void
nsWindow::OnLeaveNotifyEvent(GtkWidget *aWidget, GdkEventCrossing *aEvent)
{
// XXXldb Is this the right test for embedding cases?
if (aEvent->subwindow != NULL)
return;
@@ -2434,8 +2440,17 @@ nsWindow::NativeCreate(nsIWidget *aParent,
G_CALLBACK(delete_event_cb), NULL);
g_signal_connect(G_OBJECT(mShell), "window_state_event",
G_CALLBACK(window_state_event_cb), NULL);
g_signal_connect(G_OBJECT(mShell), "style_set",
G_CALLBACK(style_set_cb), NULL);
GtkSettings* default_settings = gtk_settings_get_default();
g_signal_connect_after(default_settings,
"notify::gtk-theme-name",
G_CALLBACK(theme_changed_cb), this);
g_signal_connect_after(default_settings,
"notify::gtk-key-theme-name",
G_CALLBACK(theme_changed_cb), this);
g_signal_connect_after(default_settings,
"notify::gtk-font-name",
G_CALLBACK(theme_changed_cb), this);
}
if (mContainer) {
@@ -3916,11 +3931,9 @@ window_state_event_cb (GtkWidget *widget, GdkEventWindowState *event)
/* static */
void
style_set_cb (GtkWidget *widget, GtkStyle *previous_style, gpointer data)
theme_changed_cb (GtkSettings *settings, GParamSpec *pspec, nsWindow *data)
{
nsWindow *window = get_window_for_gtk_widget(widget);
if (window)
window->ThemeChanged();
data->ThemeChanged();
}
//////////////////////////////////////////////////////////////////////