Add window ctrl

This commit is contained in:
daleclack 2024-01-29 22:04:23 +08:00
parent d8f1fc1c69
commit 0522065cd5
2 changed files with 74 additions and 2 deletions

View File

@ -16,6 +16,8 @@ struct _MyDock
GtkWidget *main_pic, *finder;
GtkWidget *btnlaunch, *launchpad_stack, // launchpad
*default_page, *launchpad_page;
GtkWidget *btnfiles, *btndraw, *btncalc, *btnedit, *btnimage, // Dock buttons
*btnset, *btngame, *btngame24, *btnmine;
GtkWidget *padabout, *padaud, *paddraw, *padfile, *padgedit, // Launchpad icons
*padgame, *padimage, *padnote, *padedit, *padvlc, *padvlc_win32,
*padrun, *padset, *padgame24, *padcalc, *padmine;
@ -28,6 +30,7 @@ struct _MyDock
G_DEFINE_TYPE(MyDock, my_dock, GTK_TYPE_BOX)
// Launchpad control
void hide_launchpad(MyDock *dock)
{
// Hide the launchpad
@ -53,6 +56,7 @@ static void btnlaunch_clicked(GtkWidget *widget, MyDock *dock)
}
}
// The context menu control
static void pressed(GtkGesture *gesture, int n_press,
double x, double y, MyDock *dock)
{
@ -62,6 +66,56 @@ static void pressed(GtkGesture *gesture, int n_press,
gtk_popover_popup(GTK_POPOVER(dock->context_menu));
}
static void padset_clicked(GtkWidget *widget, MyDock *dock)
{
}
static void btnset_clicked(GtkWidget *widget, MyDock *dock)
{
}
static gboolean prefs_win_closed()
{
return TRUE;
}
// Window control func
static void window_ctrl(GtkWindow *window, GtkWindow *parent, gboolean on_dock)
{
// Get GdkSurface for window state
GdkSurface *surface = gtk_native_get_surface(GTK_NATIVE(window));
if (surface)
{
// The state will available when the window open
auto state = gdk_toplevel_get_state(GDK_TOPLEVEL(surface));
switch (state)
{
// Minimized
case GDK_TOPLEVEL_STATE_MINIMIZED:
gtk_window_set_transient_for(window, parent);
gtk_window_unminimize(window);
break;
default:
// The controlled window is on dock
if (on_dock)
{
gtk_window_set_transient_for(window, NULL);
gtk_window_minimize(window);
break;
}
}
}
else
{
// Create a window
gtk_window_set_transient_for(window, parent);
gtk_window_present(window);
}
}
//
static void my_dock_init(MyDock *self)
{
// Builder for the main dock
@ -74,6 +128,15 @@ static void my_dock_init(MyDock *self)
self->dock_left = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "dock_left"));
self->icons_sw = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "icons_sw"));
self->btnlaunch = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btnlaunch"));
self->btnfiles = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btnfiles"));
self->btncalc = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btncalc"));
self->btndraw = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btndraw"));
self->btnedit = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btnedit"));
self->btngame24 = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btngame24"));
self->btngame = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btngame"));
self->btnimage = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btnimage"));
self->btnmine = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btnmine"));
self->btnset = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "btnset"));
self->launchpad_stack = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "launchpad_stack"));
self->default_page = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "default_page"));
self->launchpad_page = GTK_WIDGET(gtk_builder_get_object(self->dock_builder, "launchpad_page"));
@ -186,3 +249,9 @@ GtkWidget *my_dock_new()
{
return GTK_WIDGET(g_object_new(my_dock_get_type(), NULL));
}
void my_dock_set_prefs(MyPrefs *prefs)
{
// Bind prefs to MyDock
}

View File

@ -1,6 +1,7 @@
#pragma once
#include <gtk/gtk.h>
#include "MyPrefs.h"
G_DECLARE_FINAL_TYPE(MyDock, my_dock, MY, DOCK, GtkBox)
@ -9,3 +10,5 @@ GtkWidget *my_dock_new(); // Create a new MyDock
void hide_launchpad(MyDock *dock); // Hide the launchpad
GtkWidget *my_dock_get_background(MyDock *dock); // Get Background widget
void my_dock_set_prefs(MyPrefs *prefs); // Bind prefs window with dock