Add minimal support for Wayland

This just gets it running properly, but disables features that are
difficult or impossible to do on Wayland (the window selector, and the
stuff that uses libwnck).  At least it doesn't segfault on startup
anymore.

Fixes: #73
This commit is contained in:
Brian Tarricone
2023-03-24 10:51:15 +00:00
committed by Gaël Bonithon
parent 989c04a6cb
commit ecd1e1a645
2 changed files with 19 additions and 6 deletions

View File

@@ -24,6 +24,7 @@
#include <X11/Xproto.h> #include <X11/Xproto.h>
#include <glib-object.h> #include <glib-object.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h> #include <gdk/gdkkeysyms.h>
@@ -303,8 +304,12 @@ xtm_process_window_init (XtmProcessWindow *window)
G_CALLBACK (show_settings_dialog), window); G_CALLBACK (show_settings_dialog), window);
button = GTK_WIDGET (gtk_builder_get_object (window->builder, "button-identify")); button = GTK_WIDGET (gtk_builder_get_object (window->builder, "button-identify"));
g_signal_connect (G_OBJECT (button), "clicked", if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
G_CALLBACK (xwininfo_clicked_cb), window); g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (xwininfo_clicked_cb), window);
} else {
gtk_widget_hide (button);
}
window->filter_searchbar = GTK_WIDGET (gtk_builder_get_object (window->builder, "filter-searchbar")); window->filter_searchbar = GTK_WIDGET (gtk_builder_get_object (window->builder, "filter-searchbar"));
{ {

View File

@@ -24,6 +24,10 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gmodule.h> #include <gmodule.h>
#ifdef HAVE_WNCK
#include <gdk/gdkx.h>
#endif
#include "task-manager.h" #include "task-manager.h"
#ifdef HAVE_WNCK #ifdef HAVE_WNCK
#include "app-manager.h" #include "app-manager.h"
@@ -93,7 +97,9 @@ static void
xtm_task_manager_init (XtmTaskManager *manager) xtm_task_manager_init (XtmTaskManager *manager)
{ {
#ifdef HAVE_WNCK #ifdef HAVE_WNCK
manager->app_manager = xtm_app_manager_new (); if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
manager->app_manager = xtm_app_manager_new ();
}
#endif #endif
manager->tasks = g_array_new (FALSE, FALSE, sizeof (Task)); manager->tasks = g_array_new (FALSE, FALSE, sizeof (Task));
@@ -111,7 +117,9 @@ xtm_task_manager_finalize (GObject *object)
XtmTaskManager *manager = XTM_TASK_MANAGER (object); XtmTaskManager *manager = XTM_TASK_MANAGER (object);
g_array_free (manager->tasks, TRUE); g_array_free (manager->tasks, TRUE);
#ifdef HAVE_WNCK #ifdef HAVE_WNCK
g_object_unref (manager->app_manager); if (manager->app_manager != NULL) {
g_object_unref (manager->app_manager);
}
#endif #endif
g_object_unref (settings); g_object_unref (settings);
} }
@@ -235,8 +243,8 @@ model_update_tree_iter (XtmTaskManager *manager, GtkTreeIter *iter, glong timest
gchar *old_state; gchar *old_state;
gchar *background, *foreground; gchar *background, *foreground;
#ifdef HAVE_WNCK #ifdef HAVE_WNCK
App *app = xtm_app_manager_get_app_from_pid (manager->app_manager, task->pid); App *app = manager->app_manager != NULL ? xtm_app_manager_get_app_from_pid (manager->app_manager, task->pid) : NULL;
GdkPixbuf *icon; GdkPixbuf *icon = NULL;
#endif #endif
vsz = g_format_size_full (task->vsz, G_FORMAT_SIZE_IEC_UNITS); vsz = g_format_size_full (task->vsz, G_FORMAT_SIZE_IEC_UNITS);