mirror of
https://github.com/rozniak/xfce-winxp-tc.git
synced 2026-01-26 11:39:44 +00:00
Bugfix: Fixes #284, Some application icons using defaults in taskband
This commit is contained in:
@@ -23,6 +23,12 @@ WinTCWndMgmtWindow* (*p_wnck_screen_get_active_window) (
|
||||
) = NULL;
|
||||
WinTCWndMgmtScreen* (*p_wnck_screen_get_default) (void) = NULL;
|
||||
|
||||
const gchar* (*p_wnck_window_get_class_instance_name) (
|
||||
WinTCWndMgmtWindow* window
|
||||
) = NULL;
|
||||
gboolean (*p_wnck_window_get_icon_is_fallback) (
|
||||
WinTCWndMgmtWindow* window
|
||||
) = NULL;
|
||||
GdkPixbuf* (*p_wnck_window_get_mini_icon) (
|
||||
WinTCWndMgmtWindow* window
|
||||
) = NULL;
|
||||
@@ -85,6 +91,12 @@ gboolean init_dll_wnck()
|
||||
p_wnck_screen_get_default =
|
||||
dlsym(dl_wnck, "wnck_screen_get_default");
|
||||
|
||||
p_wnck_window_get_class_instance_name =
|
||||
dlsym(dl_wnck, "wnck_window_get_class_instance_name");
|
||||
|
||||
p_wnck_window_get_icon_is_fallback =
|
||||
dlsym(dl_wnck, "wnck_window_get_icon_is_fallback");
|
||||
|
||||
p_wnck_window_get_mini_icon =
|
||||
dlsym(dl_wnck, "wnck_window_get_mini_icon");
|
||||
|
||||
@@ -103,14 +115,16 @@ gboolean init_dll_wnck()
|
||||
// Check all symbols loaded
|
||||
//
|
||||
if (
|
||||
p_wnck_set_client_type == NULL ||
|
||||
p_wnck_screen_get_active_window == NULL ||
|
||||
p_wnck_screen_get_default == NULL ||
|
||||
p_wnck_window_get_mini_icon == NULL ||
|
||||
p_wnck_window_get_name == NULL ||
|
||||
p_wnck_window_is_skip_tasklist == NULL ||
|
||||
p_wnck_window_minimize == NULL ||
|
||||
p_wnck_window_unminimize == NULL
|
||||
p_wnck_set_client_type == NULL ||
|
||||
p_wnck_screen_get_active_window == NULL ||
|
||||
p_wnck_screen_get_default == NULL ||
|
||||
p_wnck_window_get_class_instance_name == NULL ||
|
||||
p_wnck_window_get_icon_is_fallback == NULL ||
|
||||
p_wnck_window_get_mini_icon == NULL ||
|
||||
p_wnck_window_get_name == NULL ||
|
||||
p_wnck_window_is_skip_tasklist == NULL ||
|
||||
p_wnck_window_minimize == NULL ||
|
||||
p_wnck_window_unminimize == NULL
|
||||
)
|
||||
{
|
||||
g_warning("%s", "libwnck loaded, but not all symbols.");
|
||||
|
||||
@@ -27,6 +27,12 @@ extern WinTCWndMgmtWindow* (*p_wnck_screen_get_active_window) (
|
||||
);
|
||||
extern WinTCWndMgmtScreen* (*p_wnck_screen_get_default) (void);
|
||||
|
||||
extern const gchar* (*p_wnck_window_get_class_instance_name) (
|
||||
WinTCWndMgmtWindow* Window
|
||||
);
|
||||
extern gboolean (*p_wnck_window_get_icon_is_fallback) (
|
||||
WinTCWndMgmtWindow* window
|
||||
);
|
||||
extern GdkPixbuf* (*p_wnck_window_get_mini_icon) (
|
||||
WinTCWndMgmtWindow* window
|
||||
);
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
//
|
||||
// FORWARD DECLARATIONS
|
||||
//
|
||||
static GdkPixbuf* wnck_window_get_mini_icon_real(
|
||||
WinTCWndMgmtWindow* window
|
||||
);
|
||||
static void wnck_window_unminimize_real(
|
||||
WinTCWndMgmtWindow* window,
|
||||
guint64 timestamp
|
||||
@@ -30,7 +33,7 @@ gboolean init_wndmgmt_wnck_impl(void)
|
||||
//
|
||||
wintc_wndmgmt_screen_get_active_window = p_wnck_screen_get_active_window;
|
||||
wintc_wndmgmt_screen_get_default = p_wnck_screen_get_default;
|
||||
wintc_wndmgmt_window_get_mini_icon = p_wnck_window_get_mini_icon;
|
||||
wintc_wndmgmt_window_get_mini_icon = &wnck_window_get_mini_icon_real;
|
||||
wintc_wndmgmt_window_get_name = p_wnck_window_get_name;
|
||||
wintc_wndmgmt_window_is_skip_tasklist = p_wnck_window_is_skip_tasklist;
|
||||
wintc_wndmgmt_window_minimize = p_wnck_window_minimize;
|
||||
@@ -44,6 +47,50 @@ gboolean init_wndmgmt_wnck_impl(void)
|
||||
//
|
||||
// PRIVATE FUNCTIONS
|
||||
//
|
||||
static GdkPixbuf* wnck_window_get_mini_icon_real(
|
||||
WinTCWndMgmtWindow* window
|
||||
)
|
||||
{
|
||||
GdkPixbuf* icon = p_wnck_window_get_mini_icon(window);
|
||||
GdkPixbuf* icon_resolv;
|
||||
GtkIconTheme* icon_theme;
|
||||
const gchar* wm_class;
|
||||
|
||||
if (p_wnck_window_get_icon_is_fallback(window))
|
||||
{
|
||||
// Try resolving an icon in the theme using WM_CLASS
|
||||
//
|
||||
icon_theme = gtk_icon_theme_get_default();
|
||||
wm_class = p_wnck_window_get_class_instance_name(window);
|
||||
|
||||
WINTC_LOG_DEBUG(
|
||||
"dpa: look up icon for wnd %p using WM_CLASS %s",
|
||||
window,
|
||||
wm_class
|
||||
);
|
||||
|
||||
icon_resolv =
|
||||
gtk_icon_theme_load_icon(
|
||||
icon_theme,
|
||||
wm_class,
|
||||
16, // GTK_ICON_SIZE_MENU
|
||||
GTK_ICON_LOOKUP_FORCE_SIZE,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (icon_resolv)
|
||||
{
|
||||
icon = icon_resolv; // Pass on
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_object_ref(icon);
|
||||
}
|
||||
|
||||
return icon;
|
||||
}
|
||||
|
||||
static void wnck_window_unminimize_real(
|
||||
WinTCWndMgmtWindow* window,
|
||||
guint64 timestamp
|
||||
|
||||
@@ -120,17 +120,21 @@ static void window_manager_update_icon(
|
||||
WindowManagerSingle* window_manager
|
||||
)
|
||||
{
|
||||
GdkPixbuf* icon;
|
||||
|
||||
if (window_manager->button == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
icon = wintc_wndmgmt_window_get_mini_icon(window_manager->managed_window);
|
||||
|
||||
gtk_image_set_from_pixbuf(
|
||||
window_manager->button_icon,
|
||||
wintc_wndmgmt_window_get_mini_icon(
|
||||
window_manager->managed_window
|
||||
)
|
||||
icon
|
||||
);
|
||||
|
||||
g_object_unref(icon);
|
||||
}
|
||||
|
||||
static void window_manager_update_state(
|
||||
|
||||
@@ -68,10 +68,10 @@ int main(
|
||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
gtk_widget_set_size_request(window, 413, 322);
|
||||
gtk_window_set_icon(GTK_WINDOW(window), NULL); // FIXME: Icon still present :(
|
||||
gtk_window_set_icon_name(GTK_WINDOW(window), "help-browser");
|
||||
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
|
||||
gtk_window_set_title(GTK_WINDOW(window), "About Windows");
|
||||
gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_MENU);
|
||||
gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
|
||||
|
||||
g_signal_connect(
|
||||
window,
|
||||
|
||||
1
windows/notepad/icons/16x16/wintc-notepad.png
Symbolic link
1
windows/notepad/icons/16x16/wintc-notepad.png
Symbolic link
@@ -0,0 +1 @@
|
||||
notepad.png
|
||||
1
windows/notepad/icons/32x32/wintc-notepad.png
Symbolic link
1
windows/notepad/icons/32x32/wintc-notepad.png
Symbolic link
@@ -0,0 +1 @@
|
||||
notepad.png
|
||||
1
windows/notepad/icons/48x48/wintc-notepad.png
Symbolic link
1
windows/notepad/icons/48x48/wintc-notepad.png
Symbolic link
@@ -0,0 +1 @@
|
||||
notepad.png
|
||||
Reference in New Issue
Block a user