Enhancement: Refactor Start menu, removes some hacks, fixes some bugs

This commit is contained in:
Rory Fewell
2024-02-25 21:20:12 +00:00
parent 977df806a5
commit 59dff93fc5
46 changed files with 3005 additions and 2075 deletions

View File

@@ -64,7 +64,8 @@ static gboolean on_popup_window_focus_out(
// PUBLIC FUNCTIONS
//
GtkWidget* wintc_dpa_create_popup(
GtkWidget* owner
GtkWidget* owner,
gboolean enable_composition
)
{
GtkWidget* popup;
@@ -77,10 +78,6 @@ GtkWidget* wintc_dpa_create_popup(
{
popup = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_decorated(
GTK_WINDOW(popup),
FALSE
);
gtk_window_set_type_hint(
GTK_WINDOW(popup),
GDK_WINDOW_TYPE_HINT_POPUP_MENU
@@ -106,6 +103,34 @@ GtkWidget* wintc_dpa_create_popup(
GDK_FOCUS_CHANGE_MASK
);
// If the application wants composition (eg. for shadows) we fake out
// CSD here
//
if (enable_composition)
{
GtkWidget* fake_titlebar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
// HACK: Apply CSS to force the fake titlebar to not show up as
// Adwaita has a min-height on titlebar boxes! Blah!
//
wintc_widget_add_css(
fake_titlebar,
"* { min-height: 0px; }"
);
gtk_window_set_titlebar(
GTK_WINDOW(popup),
fake_titlebar
);
}
else
{
gtk_window_set_decorated(
GTK_WINDOW(popup),
FALSE
);
}
// Connect signals
//
g_signal_connect(
@@ -144,7 +169,11 @@ void wintc_dpa_show_popup(
);
gtk_widget_show_all(popup);
height = gtk_widget_get_allocated_height(popup);
gtk_window_get_size(
GTK_WINDOW(popup),
NULL,
&height
);
gdk_window_get_origin(
gtk_widget_get_window(owner),

View File

@@ -24,7 +24,8 @@ typedef enum
// PUBLIC FUNCTIONS
//
GtkWidget* wintc_dpa_create_popup(
GtkWidget* owner
GtkWidget* owner,
gboolean enable_composition
);
void wintc_dpa_show_popup(
GtkWidget* popup,

View File

@@ -6,9 +6,6 @@
#include "api.h"
#include "impl-x11.h"
// FIXME: Remove this before release
#define TASKBAND_ROW_HEIGHT 30
//
// STRUCTURE DEFINITIONS
//
@@ -127,12 +124,13 @@ static void on_taskband_realized(
)
{
GdkAtom cardinal_atom;
GdkDisplay* display = gdk_display_get_default();
GdkDisplay* display = gdk_display_get_default();
GdkRectangle geometry;
GdkMonitor* monitor = NULL;
int monitor_count = gdk_display_get_n_monitors(display);
gint height_request = 0;
GdkMonitor* monitor = NULL;
int monitor_count = gdk_display_get_n_monitors(display);
GdkAtom net_wm_strut_partial_atom;
int screen_bottom = 0;
int screen_bottom = 0;
cardinal_atom =
gdk_atom_intern_static_string("CARDINAL");
@@ -165,19 +163,25 @@ static void on_taskband_realized(
gdk_monitor_get_geometry(monitor, &geometry);
gtk_window_set_default_size(
GTK_WINDOW(self),
gtk_widget_get_size_request(
self,
NULL,
&height_request
);
gtk_widget_set_size_request(
self,
geometry.width,
TASKBAND_ROW_HEIGHT
height_request
);
gtk_window_move(
GTK_WINDOW(self),
geometry.x,
geometry.y + geometry.height - TASKBAND_ROW_HEIGHT
geometry.y + geometry.height - height_request
);
struts.bottom =
screen_bottom - (geometry.y + geometry.height) + TASKBAND_ROW_HEIGHT;
screen_bottom - (geometry.y + geometry.height) + height_request;
struts.bottom_start_x = geometry.x;
struts.bottom_end_x = geometry.x + geometry.width;