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));
#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
}

View File

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

View File

@ -73,7 +73,10 @@ typedef struct
gboolean visible;
} GimpAboutDialog;
#ifdef G_OS_WIN32
static void about_dialog_realize (GtkWidget *widget,
GimpAboutDialog *dialog);
#endif
static void about_dialog_map (GtkWidget *widget,
GimpAboutDialog *dialog);
static void about_dialog_unmap (GtkWidget *widget,
@ -166,7 +169,11 @@ about_dialog_create (Gimp *gimp,
g_signal_connect (widget, "response",
G_CALLBACK (gtk_widget_destroy),
NULL);
#ifdef G_OS_WIN32
g_signal_connect (widget, "realize",
G_CALLBACK (about_dialog_realize),
&dialog);
#endif
g_signal_connect (widget, "map",
G_CALLBACK (about_dialog_map),
&dialog);
@ -198,6 +205,15 @@ about_dialog_create (Gimp *gimp,
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
about_dialog_map (GtkWidget *widget,
GimpAboutDialog *dialog)
@ -215,10 +231,6 @@ about_dialog_map (GtkWidget *widget,
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

View File

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

View File

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

View File

@ -678,10 +678,10 @@ themes_theme_paths_notify (GimpExtensionManager *manager,
}
}
#ifdef G_OS_WIN32
void
themes_set_title_bar (Gimp *gimp)
{
#ifdef G_OS_WIN32
GList *windows = gimp_get_image_windows (gimp);
GList *iter;
@ -689,10 +689,10 @@ themes_set_title_bar (Gimp *gimp)
{
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)
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,
const gchar *first_component,
...) G_GNUC_NULL_TERMINATED;
#ifdef G_OS_WIN32
void themes_set_title_bar (Gimp *gimp);
#endif
#endif /* __THEMES_H__ */

View File

@ -86,8 +86,10 @@ static gboolean gimp_file_dialog_delete_event (GtkWidget *w
GdkEventAny *event);
static void gimp_file_dialog_response (GtkDialog *dialog,
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);
#endif
static GFile * gimp_file_dialog_real_get_default_folder (GimpFileDialog *dialog);
static void gimp_file_dialog_real_save_state (GimpFileDialog *dialog,
const gchar *state_name);
@ -228,8 +230,8 @@ static void
gimp_file_dialog_init (GimpFileDialog *dialog)
{
#ifdef G_OS_WIN32
g_signal_connect (dialog, "map",
G_CALLBACK (gimp_file_dialog_map),
g_signal_connect (dialog, "realize",
G_CALLBACK (gimp_file_dialog_realize),
NULL);
#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
gimp_window_set_title_bar_theme (dialog->gimp, GTK_WIDGET (dialog), FALSE);
#endif
static void
gimp_file_dialog_realize (GimpFileDialog *dialog,
gpointer data)
{
gimp_window_set_title_bar_theme (dialog->gimp, GTK_WIDGET (dialog));
}
#endif
static GFile *
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,
GdkEventButton *event,
gpointer data);
static void gimp_icon_picker_dialog_map (GtkWidget *dialog,
#ifdef G_OS_WIN32
static void gimp_icon_picker_dialog_realize (GtkWidget *dialog,
gpointer *data);
#endif
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);
#ifdef G_OS_WIN32
g_signal_connect (dialog, "map",
G_CALLBACK (gimp_icon_picker_dialog_map),
g_signal_connect (dialog, "realize",
G_CALLBACK (gimp_icon_picker_dialog_realize),
picker);
#endif
@ -616,14 +617,14 @@ gimp_icon_picker_menu_from_name (GtkWidget *widget,
gimp_popup_show (GIMP_POPUP (popup), GTK_WIDGET (picker));
}
static void
gimp_icon_picker_dialog_map (GtkWidget *dialog,
gpointer *data)
{
#ifdef G_OS_WIN32
static void
gimp_icon_picker_dialog_realize (GtkWidget *dialog,
gpointer *data)
{
GimpIconPicker *picker = GIMP_ICON_PICKER (data);
GimpIconPickerPrivate *private = GET_PRIVATE (picker);
gimp_window_set_title_bar_theme (private->gimp, dialog, FALSE);
#endif
gimp_window_set_title_bar_theme (private->gimp, dialog);
}
#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,
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);
#endif
static void gimp_search_popup_confirm (GimpPopup *popup);
/* 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);
#ifdef G_OS_WIN32
g_signal_connect (search_popup, "map",
G_CALLBACK (gimp_search_popup_map),
g_signal_connect (search_popup, "realize",
G_CALLBACK (gimp_search_popup_realize),
NULL);
#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
static void
gimp_search_popup_realize (GimpSearchPopup *search_popup,
gpointer data)
{
/* Since this popup is initially modal to the main window,
* toggling the visibility of the GdkWindow causes odd
* behavior. Instead, we change the opacity on launch to
* refresh the titlebar theme */
gimp_window_set_title_bar_theme (search_popup->priv->gimp,
GTK_WIDGET (search_popup),
TRUE);
GTK_WIDGET (search_popup));
gtk_widget_set_opacity (GTK_WIDGET (search_popup), 0);
gtk_widget_set_opacity (GTK_WIDGET (search_popup), 1);
#endif
}
#endif
static void
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,
gint response_id,
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);
#endif
static void gimp_settings_box_toplevel_unmap (GtkWidget *toplevel,
GtkWidget *dialog);
static void gimp_settings_box_truncate_list (GimpSettingsBox *box,
@ -740,8 +742,8 @@ gimp_settings_box_file_dialog (GimpSettingsBox *box,
TRUE);
#ifdef G_OS_WIN32
g_signal_connect (dialog, "map",
G_CALLBACK (gimp_settings_box_dialog_map),
g_signal_connect (dialog, "realize",
G_CALLBACK (gimp_settings_box_dialog_realize),
box);
#endif
g_signal_connect (dialog, "response",
@ -832,17 +834,17 @@ gimp_settings_box_file_response (GtkWidget *dialog,
gtk_widget_destroy (dialog);
}
static void
gimp_settings_box_dialog_map (GtkWidget *dialog,
gpointer *data)
{
#ifdef G_OS_WIN32
static void
gimp_settings_box_dialog_realize (GtkWidget *dialog,
gpointer *data)
{
GimpSettingsBox *box = (GimpSettingsBox *) data;
GimpSettingsBoxPrivate *private = GET_PRIVATE (box);
gimp_window_set_title_bar_theme (private->gimp, dialog, FALSE);
#endif
gimp_window_set_title_bar_theme (private->gimp, dialog);
}
#endif
static void
gimp_settings_box_toplevel_unmap (GtkWidget *toplevel,

View File

@ -2651,12 +2651,11 @@ gimp_window_set_transient_cb (GtkWidget *window,
#endif
}
#ifdef G_OS_WIN32
void
gimp_window_set_title_bar_theme (Gimp *gimp,
GtkWidget *dialog,
gboolean is_main_window)
GtkWidget *dialog)
{
#ifdef G_OS_WIN32
HWND hwnd;
GdkWindow *window = NULL;
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);
DwmSetWindowAttribute (hwnd, DWMWA_USE_IMMERSIVE_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 **mnemonic_path1,
gchar **path1_section_name);
#ifdef G_OS_WIN32
void gimp_window_set_title_bar_theme (Gimp *gimp,
GtkWidget *dialog,
gboolean is_main_window);
GtkWidget *dialog);
#endif
#endif /* __APP_GIMP_WIDGETS_UTILS_H__ */

View File

@ -174,7 +174,7 @@ gimp_dialog_init (GimpDialog *dialog)
NULL);
#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),
NULL);
#endif
@ -806,11 +806,6 @@ gimp_dialog_set_title_bar_theme (GtkWidget *dialog)
DwmSetWindowAttribute (hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE,
&use_dark_mode, sizeof (use_dark_mode));
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