Issue #11071: Changed detailed_signal from "map" to "realize" to enable opening animations

This commit is contained in:
Cheesequake 2024-04-11 14:59:15 +00:00 committed by Alx Sa
parent 4652022368
commit 702d5e1e80
14 changed files with 98 additions and 92 deletions

View file

@ -135,7 +135,7 @@ error_console_save_cmd_callback (GimpAction *action,
gtk_window_present (GTK_WINDOW (console->file_dialog)); gtk_window_present (GTK_WINDOW (console->file_dialog));
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
gimp_window_set_title_bar_theme (console->gimp, console->file_dialog, FALSE); gimp_window_set_title_bar_theme (console->gimp, console->file_dialog);
#endif #endif
} }

View file

@ -122,7 +122,7 @@ gradients_save_as_pov_ray_cmd_callback (GimpAction *action,
gtk_window_present (GTK_WINDOW (dialog)); gtk_window_present (GTK_WINDOW (dialog));
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
gimp_window_set_title_bar_theme (context->gimp, dialog, FALSE); gimp_window_set_title_bar_theme (context->gimp, dialog);
#endif #endif
} }

View file

@ -73,7 +73,10 @@ typedef struct
gboolean visible; gboolean visible;
} GimpAboutDialog; } GimpAboutDialog;
#ifdef G_OS_WIN32
static void about_dialog_realize (GtkWidget *widget,
GimpAboutDialog *dialog);
#endif
static void about_dialog_map (GtkWidget *widget, static void about_dialog_map (GtkWidget *widget,
GimpAboutDialog *dialog); GimpAboutDialog *dialog);
static void about_dialog_unmap (GtkWidget *widget, static void about_dialog_unmap (GtkWidget *widget,
@ -166,7 +169,11 @@ about_dialog_create (Gimp *gimp,
g_signal_connect (widget, "response", g_signal_connect (widget, "response",
G_CALLBACK (gtk_widget_destroy), G_CALLBACK (gtk_widget_destroy),
NULL); NULL);
#ifdef G_OS_WIN32
g_signal_connect (widget, "realize",
G_CALLBACK (about_dialog_realize),
&dialog);
#endif
g_signal_connect (widget, "map", g_signal_connect (widget, "map",
G_CALLBACK (about_dialog_map), G_CALLBACK (about_dialog_map),
&dialog); &dialog);
@ -198,6 +205,15 @@ about_dialog_create (Gimp *gimp,
return dialog.dialog; return dialog.dialog;
} }
#ifdef G_OS_WIN32
static void
about_dialog_realize (GtkWidget *widget,
GimpAboutDialog *dialog)
{
gimp_window_set_title_bar_theme (dialog->gimp, widget);
}
#endif
static void static void
about_dialog_map (GtkWidget *widget, about_dialog_map (GtkWidget *widget,
GimpAboutDialog *dialog) GimpAboutDialog *dialog)
@ -215,10 +231,6 @@ about_dialog_map (GtkWidget *widget,
dialog->timer = g_timeout_add (800, about_dialog_timer, dialog); dialog->timer = g_timeout_add (800, about_dialog_timer, dialog);
} }
#ifdef G_OS_WIN32
gimp_window_set_title_bar_theme (dialog->gimp, widget, FALSE);
#endif
} }
static void static void

View file

@ -45,9 +45,10 @@ struct _VectorsExportDialog
/* local function prototypes */ /* local function prototypes */
#ifdef G_OS_WIN32
static void vectors_export_dialog_map (GtkWidget *dialog, static void vectors_export_dialog_realize (GtkWidget *dialog,
VectorsExportDialog *data); VectorsExportDialog *data);
#endif
static void vectors_export_dialog_free (VectorsExportDialog *private); static void vectors_export_dialog_free (VectorsExportDialog *private);
static void vectors_export_dialog_response (GtkWidget *widget, static void vectors_export_dialog_response (GtkWidget *widget,
gint response_id, gint response_id,
@ -115,8 +116,8 @@ vectors_export_dialog_new (GimpImage *image,
dialog, 0); dialog, 0);
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
g_signal_connect (dialog, "map", g_signal_connect (dialog, "realize",
G_CALLBACK (vectors_export_dialog_map), G_CALLBACK (vectors_export_dialog_realize),
private); private);
#endif #endif
g_signal_connect (dialog, "delete-event", g_signal_connect (dialog, "delete-event",
@ -144,14 +145,14 @@ vectors_export_dialog_new (GimpImage *image,
/* private functions */ /* private functions */
static void
vectors_export_dialog_map (GtkWidget *dialog,
VectorsExportDialog *data)
{
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
gimp_window_set_title_bar_theme (data->image->gimp, dialog, FALSE); static void
#endif vectors_export_dialog_realize (GtkWidget *dialog,
VectorsExportDialog *data)
{
gimp_window_set_title_bar_theme (data->image->gimp, dialog);
} }
#endif
static void static void
vectors_export_dialog_free (VectorsExportDialog *private) vectors_export_dialog_free (VectorsExportDialog *private)

View file

@ -46,9 +46,10 @@ struct _VectorsImportDialog
/* local function prototypes */ /* local function prototypes */
#ifdef G_OS_WIN32
static void vectors_import_dialog_map (GtkWidget *dialog, static void vectors_import_dialog_realize (GtkWidget *dialog,
VectorsImportDialog *data); VectorsImportDialog *data);
#endif
static void vectors_import_dialog_free (VectorsImportDialog *private); static void vectors_import_dialog_free (VectorsImportDialog *private);
static void vectors_import_dialog_response (GtkWidget *dialog, static void vectors_import_dialog_response (GtkWidget *dialog,
gint response_id, gint response_id,
@ -117,8 +118,8 @@ vectors_import_dialog_new (GimpImage *image,
dialog, 0); dialog, 0);
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
g_signal_connect (dialog, "map", g_signal_connect (dialog, "realize",
G_CALLBACK (vectors_import_dialog_map), G_CALLBACK (vectors_import_dialog_realize),
private); private);
#endif #endif
g_signal_connect (dialog, "delete-event", g_signal_connect (dialog, "delete-event",
@ -173,14 +174,14 @@ vectors_import_dialog_new (GimpImage *image,
/* private functions */ /* private functions */
static void
vectors_import_dialog_map (GtkWidget *dialog,
VectorsImportDialog *data)
{
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
gimp_window_set_title_bar_theme (data->image->gimp, dialog, FALSE); static void
#endif vectors_import_dialog_realize (GtkWidget *dialog,
VectorsImportDialog *data)
{
gimp_window_set_title_bar_theme (data->image->gimp, dialog);
} }
#endif
static void static void
vectors_import_dialog_free (VectorsImportDialog *private) vectors_import_dialog_free (VectorsImportDialog *private)

View file

@ -678,10 +678,10 @@ themes_theme_paths_notify (GimpExtensionManager *manager,
} }
} }
#ifdef G_OS_WIN32
void void
themes_set_title_bar (Gimp *gimp) themes_set_title_bar (Gimp *gimp)
{ {
#ifdef G_OS_WIN32
GList *windows = gimp_get_image_windows (gimp); GList *windows = gimp_get_image_windows (gimp);
GList *iter; GList *iter;
@ -689,10 +689,10 @@ themes_set_title_bar (Gimp *gimp)
{ {
GtkWidget *window = GTK_WIDGET (windows->data); GtkWidget *window = GTK_WIDGET (windows->data);
gimp_window_set_title_bar_theme (gimp, window, TRUE); gimp_window_set_title_bar_theme (gimp, window);
} }
if (windows) if (windows)
g_list_free (windows); g_list_free (windows);
#endif
} }
#endif

View file

@ -29,7 +29,8 @@ GFile * themes_get_theme_dir (Gimp *gimp,
GFile * themes_get_theme_file (Gimp *gimp, GFile * themes_get_theme_file (Gimp *gimp,
const gchar *first_component, const gchar *first_component,
...) G_GNUC_NULL_TERMINATED; ...) G_GNUC_NULL_TERMINATED;
#ifdef G_OS_WIN32
void themes_set_title_bar (Gimp *gimp); void themes_set_title_bar (Gimp *gimp);
#endif
#endif /* __THEMES_H__ */ #endif /* __THEMES_H__ */

View file

@ -86,8 +86,10 @@ static gboolean gimp_file_dialog_delete_event (GtkWidget *w
GdkEventAny *event); GdkEventAny *event);
static void gimp_file_dialog_response (GtkDialog *dialog, static void gimp_file_dialog_response (GtkDialog *dialog,
gint response_id); gint response_id);
static void gimp_file_dialog_map (GimpFileDialog *dialog, #ifdef G_OS_WIN32
static void gimp_file_dialog_realize (GimpFileDialog *dialog,
gpointer data); gpointer data);
#endif
static GFile * gimp_file_dialog_real_get_default_folder (GimpFileDialog *dialog); static GFile * gimp_file_dialog_real_get_default_folder (GimpFileDialog *dialog);
static void gimp_file_dialog_real_save_state (GimpFileDialog *dialog, static void gimp_file_dialog_real_save_state (GimpFileDialog *dialog,
const gchar *state_name); const gchar *state_name);
@ -228,8 +230,8 @@ static void
gimp_file_dialog_init (GimpFileDialog *dialog) gimp_file_dialog_init (GimpFileDialog *dialog)
{ {
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
g_signal_connect (dialog, "map", g_signal_connect (dialog, "realize",
G_CALLBACK (gimp_file_dialog_map), G_CALLBACK (gimp_file_dialog_realize),
NULL); NULL);
#endif #endif
} }
@ -427,14 +429,14 @@ gimp_file_dialog_response (GtkDialog *dialog,
} }
} }
static void
gimp_file_dialog_map (GimpFileDialog *dialog,
gpointer data)
{
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
gimp_window_set_title_bar_theme (dialog->gimp, GTK_WIDGET (dialog), FALSE); static void
#endif gimp_file_dialog_realize (GimpFileDialog *dialog,
gpointer data)
{
gimp_window_set_title_bar_theme (dialog->gimp, GTK_WIDGET (dialog));
} }
#endif
static GFile * static GFile *
gimp_file_dialog_real_get_default_folder (GimpFileDialog *dialog) gimp_file_dialog_real_get_default_folder (GimpFileDialog *dialog)

View file

@ -108,9 +108,10 @@ static void gimp_icon_picker_menu_paste (GtkWidget *widget,
static void gimp_icon_picker_menu_copy (GtkWidget *widget, static void gimp_icon_picker_menu_copy (GtkWidget *widget,
GdkEventButton *event, GdkEventButton *event,
gpointer data); gpointer data);
#ifdef G_OS_WIN32
static void gimp_icon_picker_dialog_map (GtkWidget *dialog, static void gimp_icon_picker_dialog_realize (GtkWidget *dialog,
gpointer *data); gpointer *data);
#endif
G_DEFINE_TYPE_WITH_PRIVATE (GimpIconPicker, gimp_icon_picker, GTK_TYPE_BOX) G_DEFINE_TYPE_WITH_PRIVATE (GimpIconPicker, gimp_icon_picker, GTK_TYPE_BOX)
@ -495,8 +496,8 @@ gimp_icon_picker_menu_from_file (GtkWidget *widget,
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
g_signal_connect (dialog, "map", g_signal_connect (dialog, "realize",
G_CALLBACK (gimp_icon_picker_dialog_map), G_CALLBACK (gimp_icon_picker_dialog_realize),
picker); picker);
#endif #endif
@ -616,14 +617,14 @@ gimp_icon_picker_menu_from_name (GtkWidget *widget,
gimp_popup_show (GIMP_POPUP (popup), GTK_WIDGET (picker)); gimp_popup_show (GIMP_POPUP (popup), GTK_WIDGET (picker));
} }
static void
gimp_icon_picker_dialog_map (GtkWidget *dialog,
gpointer *data)
{
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
static void
gimp_icon_picker_dialog_realize (GtkWidget *dialog,
gpointer *data)
{
GimpIconPicker *picker = GIMP_ICON_PICKER (data); GimpIconPicker *picker = GIMP_ICON_PICKER (data);
GimpIconPickerPrivate *private = GET_PRIVATE (picker); GimpIconPickerPrivate *private = GET_PRIVATE (picker);
gimp_window_set_title_bar_theme (private->gimp, dialog, FALSE); gimp_window_set_title_bar_theme (private->gimp, dialog);
#endif
} }
#endif

View file

@ -86,9 +86,10 @@ static void gimp_search_popup_get_property (GObject *obj
static void gimp_search_popup_size_allocate (GtkWidget *widget, static void gimp_search_popup_size_allocate (GtkWidget *widget,
GtkAllocation *allocation); GtkAllocation *allocation);
static void gimp_search_popup_map (GimpSearchPopup *search_popup, #ifdef G_OS_WIN32
static void gimp_search_popup_realize (GimpSearchPopup *search_popup,
gpointer data); gpointer data);
#endif
static void gimp_search_popup_confirm (GimpPopup *popup); static void gimp_search_popup_confirm (GimpPopup *popup);
/* Signal handlers on the search entry */ /* Signal handlers on the search entry */
@ -178,8 +179,8 @@ gimp_search_popup_init (GimpSearchPopup *search_popup)
search_popup->priv = gimp_search_popup_get_instance_private (search_popup); search_popup->priv = gimp_search_popup_get_instance_private (search_popup);
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
g_signal_connect (search_popup, "map", g_signal_connect (search_popup, "realize",
G_CALLBACK (gimp_search_popup_map), G_CALLBACK (gimp_search_popup_realize),
NULL); NULL);
#endif #endif
} }
@ -540,23 +541,22 @@ gimp_search_popup_size_allocate (GtkWidget *widget,
} }
} }
static void
gimp_search_popup_map (GimpSearchPopup *search_popup,
gpointer data)
{
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
static void
gimp_search_popup_realize (GimpSearchPopup *search_popup,
gpointer data)
{
/* Since this popup is initially modal to the main window, /* Since this popup is initially modal to the main window,
* toggling the visibility of the GdkWindow causes odd * toggling the visibility of the GdkWindow causes odd
* behavior. Instead, we change the opacity on launch to * behavior. Instead, we change the opacity on launch to
* refresh the titlebar theme */ * refresh the titlebar theme */
gimp_window_set_title_bar_theme (search_popup->priv->gimp, gimp_window_set_title_bar_theme (search_popup->priv->gimp,
GTK_WIDGET (search_popup), GTK_WIDGET (search_popup));
TRUE);
gtk_widget_set_opacity (GTK_WIDGET (search_popup), 0); gtk_widget_set_opacity (GTK_WIDGET (search_popup), 0);
gtk_widget_set_opacity (GTK_WIDGET (search_popup), 1); gtk_widget_set_opacity (GTK_WIDGET (search_popup), 1);
#endif
} }
#endif
static void static void
gimp_search_popup_confirm (GimpPopup *popup) gimp_search_popup_confirm (GimpPopup *popup)

View file

@ -138,8 +138,10 @@ static void gimp_settings_box_file_dialog (GimpSettingsBox *box,
static void gimp_settings_box_file_response (GtkWidget *dialog, static void gimp_settings_box_file_response (GtkWidget *dialog,
gint response_id, gint response_id,
GimpSettingsBox *box); GimpSettingsBox *box);
static void gimp_settings_box_dialog_map (GtkWidget *dialog, #ifdef G_OS_WIN32
static void gimp_settings_box_dialog_realize (GtkWidget *dialog,
gpointer *data); gpointer *data);
#endif
static void gimp_settings_box_toplevel_unmap (GtkWidget *toplevel, static void gimp_settings_box_toplevel_unmap (GtkWidget *toplevel,
GtkWidget *dialog); GtkWidget *dialog);
static void gimp_settings_box_truncate_list (GimpSettingsBox *box, static void gimp_settings_box_truncate_list (GimpSettingsBox *box,
@ -740,8 +742,8 @@ gimp_settings_box_file_dialog (GimpSettingsBox *box,
TRUE); TRUE);
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
g_signal_connect (dialog, "map", g_signal_connect (dialog, "realize",
G_CALLBACK (gimp_settings_box_dialog_map), G_CALLBACK (gimp_settings_box_dialog_realize),
box); box);
#endif #endif
g_signal_connect (dialog, "response", g_signal_connect (dialog, "response",
@ -832,17 +834,17 @@ gimp_settings_box_file_response (GtkWidget *dialog,
gtk_widget_destroy (dialog); gtk_widget_destroy (dialog);
} }
static void
gimp_settings_box_dialog_map (GtkWidget *dialog,
gpointer *data)
{
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
static void
gimp_settings_box_dialog_realize (GtkWidget *dialog,
gpointer *data)
{
GimpSettingsBox *box = (GimpSettingsBox *) data; GimpSettingsBox *box = (GimpSettingsBox *) data;
GimpSettingsBoxPrivate *private = GET_PRIVATE (box); GimpSettingsBoxPrivate *private = GET_PRIVATE (box);
gimp_window_set_title_bar_theme (private->gimp, dialog, FALSE); gimp_window_set_title_bar_theme (private->gimp, dialog);
#endif
} }
#endif
static void static void
gimp_settings_box_toplevel_unmap (GtkWidget *toplevel, gimp_settings_box_toplevel_unmap (GtkWidget *toplevel,

View file

@ -2651,12 +2651,11 @@ gimp_window_set_transient_cb (GtkWidget *window,
#endif #endif
} }
#ifdef G_OS_WIN32
void void
gimp_window_set_title_bar_theme (Gimp *gimp, gimp_window_set_title_bar_theme (Gimp *gimp,
GtkWidget *dialog, GtkWidget *dialog)
gboolean is_main_window)
{ {
#ifdef G_OS_WIN32
HWND hwnd; HWND hwnd;
GdkWindow *window = NULL; GdkWindow *window = NULL;
gboolean use_dark_mode = FALSE; gboolean use_dark_mode = FALSE;
@ -2696,13 +2695,6 @@ gimp_window_set_title_bar_theme (Gimp *gimp,
hwnd = (HWND) gdk_win32_window_get_handle (window); hwnd = (HWND) gdk_win32_window_get_handle (window);
DwmSetWindowAttribute (hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, DwmSetWindowAttribute (hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE,
&use_dark_mode, sizeof (use_dark_mode)); &use_dark_mode, sizeof (use_dark_mode));
if (! is_main_window)
{
/* Toggle the window's visibility so the title bar change appears */
gdk_window_hide (window);
gdk_window_show (window);
}
} }
#endif
} }
#endif

View file

@ -164,10 +164,9 @@ gboolean gimp_utils_are_menu_path_identical (const gchar *path1
gchar **canonical_path1, gchar **canonical_path1,
gchar **mnemonic_path1, gchar **mnemonic_path1,
gchar **path1_section_name); gchar **path1_section_name);
#ifdef G_OS_WIN32
void gimp_window_set_title_bar_theme (Gimp *gimp, void gimp_window_set_title_bar_theme (Gimp *gimp,
GtkWidget *dialog, GtkWidget *dialog);
gboolean is_main_window); #endif
#endif /* __APP_GIMP_WIDGETS_UTILS_H__ */ #endif /* __APP_GIMP_WIDGETS_UTILS_H__ */

View file

@ -174,7 +174,7 @@ gimp_dialog_init (GimpDialog *dialog)
NULL); NULL);
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
g_signal_connect (GTK_WIDGET (dialog), "map", g_signal_connect (GTK_WIDGET (dialog), "realize",
G_CALLBACK (gimp_dialog_set_title_bar_theme), G_CALLBACK (gimp_dialog_set_title_bar_theme),
NULL); NULL);
#endif #endif
@ -806,11 +806,6 @@ gimp_dialog_set_title_bar_theme (GtkWidget *dialog)
DwmSetWindowAttribute (hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, DwmSetWindowAttribute (hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE,
&use_dark_mode, sizeof (use_dark_mode)); &use_dark_mode, sizeof (use_dark_mode));
UpdateWindow (hwnd); UpdateWindow (hwnd);
ShowWindow (hwnd, 5);
/* Toggle the window's visibility so the title bar change appears */
gdk_window_hide (window);
gdk_window_show (window);
} }
} }
#endif #endif