mirror of https://github.com/daleclack/My_GtkUi
Add custom titlebar for Calc App
This commit is contained in:
parent
aa221886b1
commit
bfa8678005
|
@ -55,6 +55,7 @@ set(RESOURCE_LIST
|
||||||
style.css
|
style.css
|
||||||
style_dark.css
|
style_dark.css
|
||||||
mine_app.css
|
mine_app.css
|
||||||
|
title_style.css
|
||||||
folder.svg
|
folder.svg
|
||||||
folder-images.svg
|
folder-images.svg
|
||||||
image_file.svg
|
image_file.svg
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
#include "CalcApp.h"
|
#include "CalcApp.h"
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
|
#include "MyTitleBar.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
struct _CalcApp
|
struct _CalcApp
|
||||||
{
|
{
|
||||||
GtkWindow parent_instance;
|
GtkWindow parent_instance;
|
||||||
|
MyTitleBar *title_bar;
|
||||||
GtkWidget *entry_ans; // Child widgets
|
GtkWidget *entry_ans; // Child widgets
|
||||||
GtkWidget *btnanswer, *btnback, *btnclear;
|
GtkWidget *btnanswer, *btnback, *btnclear;
|
||||||
GtkWidget *btn0, *btn1, *btn2, *btn3, *btn4,
|
GtkWidget *btn0, *btn1, *btn2, *btn3, *btn4,
|
||||||
|
@ -103,8 +105,10 @@ static void calc_app_init(CalcApp *self)
|
||||||
{
|
{
|
||||||
gtk_widget_init_template(GTK_WIDGET(self));
|
gtk_widget_init_template(GTK_WIDGET(self));
|
||||||
// Initalize window
|
// Initalize window
|
||||||
|
self->title_bar = my_titlebar_new();
|
||||||
gtk_window_set_title(GTK_WINDOW(self), "Calculator");
|
gtk_window_set_title(GTK_WINDOW(self), "Calculator");
|
||||||
gtk_window_set_icon_name(GTK_WINDOW(self), "calcapp");
|
gtk_window_set_icon_name(GTK_WINDOW(self), "calcapp");
|
||||||
|
my_titlebar_set_window(self->title_bar, GTK_WIDGET(self));
|
||||||
|
|
||||||
// Link Signals
|
// Link Signals
|
||||||
g_signal_connect(self->btnanswer, "clicked", G_CALLBACK(btnanswer_clicked), self);
|
g_signal_connect(self->btnanswer, "clicked", G_CALLBACK(btnanswer_clicked), self);
|
||||||
|
|
|
@ -96,41 +96,57 @@ static void pressed(GtkGesture *gesture, int n_press,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Window control func, X11/Windows Only!
|
// Window control func, X11/Windows Only!
|
||||||
|
// static void window_ctrl(GtkWindow *window, GtkWindow *parent)
|
||||||
|
// {
|
||||||
|
// // Get GdkSurface for window state
|
||||||
|
// GdkSurface *surface = gtk_native_get_surface(GTK_NATIVE(window));
|
||||||
|
// if (surface)
|
||||||
|
// {
|
||||||
|
// // The state will available when the window open
|
||||||
|
// ushort state = gdk_toplevel_get_state(GDK_TOPLEVEL(surface));
|
||||||
|
// static ushort state1 = state;
|
||||||
|
// g_print("%d\n", state);
|
||||||
|
// state -= state1;
|
||||||
|
// switch (state)
|
||||||
|
// {
|
||||||
|
// // Minimized
|
||||||
|
// case GDK_TOPLEVEL_STATE_MINIMIZED:
|
||||||
|
// g_print("Try to unminimize");
|
||||||
|
// gtk_window_set_transient_for(window, parent);
|
||||||
|
// gtk_window_unminimize(window);
|
||||||
|
// #ifdef WAYLAND_FIX
|
||||||
|
// // Fix for non-x11 environments
|
||||||
|
// gtk_window_present(window);
|
||||||
|
// #endif
|
||||||
|
// break;
|
||||||
|
// default:
|
||||||
|
// // The controlled window is 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 window_ctrl(GtkWindow *window, GtkWindow *parent)
|
static void window_ctrl(GtkWindow *window, GtkWindow *parent)
|
||||||
{
|
{
|
||||||
// Get GdkSurface for window state
|
gboolean visible = gtk_widget_get_visible(GTK_WIDGET(window));
|
||||||
GdkSurface *surface = gtk_native_get_surface(GTK_NATIVE(window));
|
// The unminimize if changed to hide
|
||||||
if (surface)
|
if (!visible)
|
||||||
{
|
{
|
||||||
// The state will available when the window open
|
gtk_widget_set_visible(GTK_WIDGET(window), TRUE);
|
||||||
ushort state = gdk_toplevel_get_state(GDK_TOPLEVEL(surface));
|
gtk_window_present(window);
|
||||||
static ushort state1 = state;
|
|
||||||
g_print("%d\n", state);
|
|
||||||
state -= state1;
|
|
||||||
switch (state)
|
|
||||||
{
|
|
||||||
// Minimized
|
|
||||||
case GDK_TOPLEVEL_STATE_MINIMIZED:
|
|
||||||
g_print("Try to unminimize");
|
|
||||||
gtk_window_set_transient_for(window, parent);
|
|
||||||
gtk_window_unminimize(window);
|
|
||||||
#ifdef WAYLAND_FIX
|
|
||||||
// Fix for non-x11 environments
|
|
||||||
gtk_window_present(window);
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// The controlled window is on dock
|
|
||||||
gtk_window_set_transient_for(window, NULL);
|
|
||||||
gtk_window_minimize(window);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Create a window
|
// Window control only available for icons on dock
|
||||||
gtk_window_set_transient_for(window, parent);
|
gtk_widget_set_visible(GTK_WIDGET(window), FALSE);
|
||||||
gtk_window_present(window);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue