# gtk 2.0.0-beta.0

GTK+ utilities for Flutter Linux applications.




## Installing
```
export PUB_HOSTED_URL=https://pub.mirror.p-hatan.com
flutter pub add 'gtk:2.0.0-beta.0'
```
Published: 2023-01-23T21:00:50.170743Z
Expected archive SHA-256: 56607b30b99ce8f8cc9ec9f8ab6f6674d907d4051928f94075e2294a095badcb

Available in cache; verification: upstream_checksum
## Direct dependencies
- ffi: ^2.0.1
- flutter: map[sdk:flutter]
- meta: ^1.8.0

## Package README (untrusted upstream documentation)
# GTK+ utilities for Flutter Linux applications

[![license: MPL](https://img.shields.io/badge/license-MPL-magenta.svg)](https://opensource.org/licenses/MPL-2.0)
[![CI](https://github.com/ubuntu-flutter-community/gtk.dart/actions/workflows/ci.yaml/badge.svg)](https://github.com/ubuntu-flutter-community/gtk.dart/actions/workflows/ci.yaml)
[![codecov](https://codecov.io/gh/ubuntu-flutter-community/gtk.dart/branch/main/graph/badge.svg?token=c9t1uqCGob)](https://codecov.io/gh/ubuntu-flutter-community/gtk.dart)

## GtkSettings

[GtkSettings](https://docs.gtk.org/gtk3/class.Settings.html) provide a mechanism
to share global settings between applications on Linux.

![screenshot](https://raw.githubusercontent.com/ubuntu-flutter-community/gtk.dart/main/example/screenshot.png)

## GtkApplication

GtkApplication allows the primary Flutter [GTK application](https://developer.gnome.org/documentation/tutorials/application.html)
instance to listen to remote application instances' command-line arguments and
file open requests.

| **NOTE:** `linux/my_application.cc` must be modified for this package to be able to function. See "Getting Started" below for details. |
| --- |

[gtk-application.webm](https://user-images.githubusercontent.com/140617/194487627-093236b4-ee1a-4b05-82e7-72024b997cd1.webm)

### Getting Started

Apply the following changes to `linux/my_application.cc`:

<details><summary><code>my_application_activate()</code>: activate an existing window if present</summary>

```diff
diff --git a/example/linux/my_application.cc b/example/linux/my_application.cc
index 5cd43c6..94e7215 100644
--- a/linux/my_application.cc
+++ b/linux/my_application.cc
@@ -20,6 +20,12 @@ static void my_application_activate(GApplication* application) {
   GtkWindow* window =
       GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
 
+  GList* windows = gtk_application_get_windows(GTK_APPLICATION(application));
+  if (windows) {
+    gtk_window_present(GTK_WINDOW(windows->data));
+    return;
+  }
+
   // Use a header bar when running in GNOME as this is the common style used
   // by applications and is the setup most users will be using (e.g. Ubuntu
   // desktop).
```
</details>

<details><summary><code>my_application_local_command_line()</code>: return <code>FALSE</code> to allow the package to handle the command line</summary>

```diff
--- a/linux/my_application.cc
+++ b/linux/my_application.cc
@@ -81,7 +81,7 @@ static gboolean my_application_local_command_line(GApplication* application,
   g_application_activate(application);
   *exit_status = 0;
 
-  return TRUE;
+  return FALSE;
 }
 
 // Implements GObject::dispose.

```
</details>


<details><summary><code>my_application_new()</code>: replace <code>G_APPLICATION_NON_UNIQUE</code> with <code>G_APPLICATION_HANDLES_COMMAND_LINE</code> and <code>G_APPLICATION_HANDLES_OPEN</code> flags</summary>

```diff
--- a/linux/my_application.cc
+++ b/linux/my_application.cc
@@ -101,7 +101,8 @@ static void my_application_class_init(MyApplicationClass* klass) {
 static void my_application_init(MyApplication* self) {}
 
 MyApplication* my_application_new() {
-  return MY_APPLICATION(g_object_new(my_application_get_type(),
-                                     "application-id", APPLICATION_ID, "flags",
-                                     G_APPLICATION_NON_UNIQUE, nullptr));
+  return MY_APPLICATION(g_object_new(
+      my_application_get_type(), "application-id", APPLICATION_ID, "flags",
+      G_APPLICATION_HANDLES_COMMAND_LINE | G_APPLICATION_HANDLES_OPEN,
+      nullptr));
 }
```
</details>

### Examples

The `GtkApplication` widget allows listening to remote application instances'
command-line arguments and file open requests from within the widget tree.

```dart
import 'package:flutter/material.dart';
import 'package:gtk_application/gtk_application.dart';

void main() {
  runApp(
    MaterialApp(
      home: GtkApplication(
        onCommandLine: (args) => print('command-line: $args'),
        onOpen: (files, hint) => print('open ($hint): $files'),
        child: // ...
      ),
    ),
  );
}
```

The `GtkApplicationNotifier` object allows listening to remote application
instances' command-line arguments and file open requests outside the widget
tree.

```dart
import 'package:flutter/widgets.dart';
import 'package:gtk_application/gtk_application.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  final notifier = GtkApplicationNotifier();
  notifier.addCommandLineListener((args) {
    print('command-line: $args');
  });
  notifier.addOpenListener((files, hint) {
    print('open ($hint): $files');
  });

  // ...
  // notifier.dispose();
}
```

## Changelog
## 2.0.0-beta.0

- Re-purpose this package to be a collection of non-visual GTK+ utilities for
  Flutter applications.
- Add `GtkApplication` handling remote command-line arguments and file open
  requests.
- Add `GtkSettings` for accessing desktop and application settings.

## 1.0.0-rc.9

- Change adwaitaLight and adwaitaDark type to getters instead of Function

## 1.0.0-rc.8

- Fix canvasColor not working

## 1.0.0-rc.7

- Add documentation for colors in libadwaita_theme
- Add adwaitaLight and adwaitaDark for LibAdwaita Theme

## 1.0.0-rc.6

- `GnomeTheme` is now deprecated, use `Theme.of(context).[color]` to get whatever color you want.

## 1.0.0-rc.5

- Get native window button placement by using gsetting schema

## 1.0.0-rc.4

- Made width nullable and fix defaults for `GtkContainer`
- Update Screenshot

## 1.0.0-rc.3

- Fix ViewSwitcher color
- Add `GtkContainer` custom widget
- Add new example app
- Fix gtk sidebar item bg color

## 1.0.0-rc.2

- Fix error when no leading icon was provided for the sidebar
- Rename `gtk_colors.dart` to `gtk_theme.dart` and moved it to the widgets directory
- Fix imports in the files

## 1.0.0-rc.1

- Remove gnomeTheme parameter requirement for gtk_sidebar
- Add details about paramters of `GnomeTheme.of(context)`

## 1.0.0-rc.0

- Use color schemes from libadwaita

## 0.9.8+1

- Remove dead code

## 0.9.8

- Add riverpod example
- Fix selected and unselected color for gtk sidebar
- Fix initial color parsing

## 0.9.5

- Fix instructions on how to use window decoration
- Update README and screenshot

## 0.9.0

- Update gsettings to latest version
- Fix native theme picker by @MalcolmMielle
- Made Window Decorations a seperate package to keep this package lightweight

## 0.8.5

- Use NavigationToolbar instead of Stack to center widget.

## 0.8.0

- Update example
- Add expanded and height property to GtkViewSwitcher

## 0.7.0+1

- Fix Padding of Icons with Gtk header button
- Update `titlebarSpace` and `padding` for `GtkHeaderBar`

## 0.7.0

- Add GtkViewSwitcher from `flutter_gtk` package
- Fix Double tap on header buttons doesn't work.
- Change default padding for header

## 0.6.0

- Remove `adwaita_icons` from dependency of example
- Revamp code for `GtkSidebar`.

## 0.5.5

- Remove `adwaita_icons` from dependency
- Add default values for onClose, onMinimize and onMaximize for GtkHeaderBar.bitsdojo and .nativeshell.
- Add titlebarSpace property to adjust the space b/w titlebar and trailing items.

## 0.5.0+1

- Rename beignDrag to performDrag for nativeshell Gtk Header.

## 0.5.0

- Add onDoubleTap and onHeaderDrag method for GtkHeaderBar
- Add padding and height parameter to GtkHeaderBar
- Add GtkHeaderBar.bitsdojo and GtkHeaderBar.nativeshell to integerate well with these plugins

## 0.4.0+1

- Update Screenshot

## 0.4.0

- Add auto detect gtk theme using GtkColorType.system by @MalcolmMielle
- Update Window Decorations plugin
- Add isActive parameter to Gtk popup button

## 0.2.3

- Change children to body for GtkPopupMenu
- Update Documentation and comments
- Update get Gtk color logic
- Update example by adding bitsdojo_window
- Update Screenshot

## 0.2.0+2

- Fix typo in README
- Add Screenshot in README

## 0.2.0+1

- Update github homepage

## 0.2.0

- Remove `bitsdojo_window` dependency

## 0.1.0+1

- Fix Readme

## 0.1.0

- initial release.







 
