Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
d881696
Bump deps
danirabbit May 19, 2025
e53ecff
Merge branch 'master' into danirabbit/gtk4
danirabbit May 28, 2025
4845fd2
Merge branch 'master' into danirabbit/gtk4
danirabbit May 30, 2025
e200457
Replace Hdy with Adw
danirabbit May 30, 2025
cf5f058
Merge branch 'master' into danirabbit/gtk4
danirabbit May 30, 2025
cbfebf1
Merge branch 'master' into danirabbit/gtk4
danirabbit May 30, 2025
245937e
Merge branch 'master' into danirabbit/gtk4
danirabbit Jun 3, 2025
ac37c9e
Little replaces
danirabbit Jun 3, 2025
149338e
Next compile stage
danirabbit Jun 3, 2025
2d2077b
Merge branch 'master' into danirabbit/gtk4
leonardo-lemos Jun 3, 2025
9f3e3f7
Indicator cleanups
danirabbit Jun 4, 2025
136fc8e
Merge branch 'master' into danirabbit/gtk4
danirabbit Jun 4, 2025
fa72c10
Merge master
danirabbit Jun 4, 2025
3f569db
build fixes
danirabbit Jun 4, 2025
24c396f
Minor syntax stuff
danirabbit Jun 4, 2025
030fa2f
merge master
danirabbit Jun 6, 2025
46a518a
Wrap up SlingshotView
danirabbit Jun 6, 2025
c3fbbf3
Merge branch 'master' into danirabbit/gtk4
danirabbit Jun 6, 2025
2bbc5ac
CategoryView: little syntax things
danirabbit Jun 6, 2025
1611514
Fix AppListRow
danirabbit Jun 6, 2025
293047f
Merge branch 'master' into danirabbit/gtk4
danirabbit Jun 6, 2025
41145df
Make it build again
danirabbit Jun 6, 2025
7aa724a
Fix oops
danirabbit Jun 6, 2025
f90e71d
small syntax fixes
danirabbit Jun 6, 2025
b450556
merge master
danirabbit Jun 7, 2025
0f69031
More fixes
danirabbit Jun 7, 2025
6556315
merge master
danirabbit Jun 9, 2025
460ad33
More context menu
danirabbit Jun 9, 2025
9ae6675
Merge branch 'master' into danirabbit/gtk4
danirabbit Jun 11, 2025
53db5a6
Some carousel stuff
danirabbit Jun 11, 2025
850a8fc
merge master
danirabbit Jun 11, 2025
056e2e7
merge master
danirabbit Jun 11, 2025
98378f0
page checker, image size
danirabbit Jun 11, 2025
665c7d6
merge master
danirabbit Jun 11, 2025
fcccc24
Fix up more syntax changes
danirabbit Jun 11, 2025
2b6dff7
Comment out everything that's broken
danirabbit Jun 23, 2025
c6c73ca
App: add menu model
danirabbit Jun 23, 2025
7e5c196
More owl
danirabbit Jun 23, 2025
7c9b241
Merge master
danirabbit Jun 23, 2025
45741a6
Merge in menu model stuff
danirabbit Jun 23, 2025
c9a00b7
Comment out last things
danirabbit Jun 23, 2025
d2d111c
Merge master
danirabbit Jun 24, 2025
5b4f338
Add menu utils
danirabbit Jun 24, 2025
e71828c
Update CI and README
danirabbit Jun 24, 2025
8462137
Fix menu crashing
danirabbit Jun 24, 2025
d16eb9d
Replace search handle event
danirabbit Jun 24, 2025
6b1fbea
Fix pager hide
danirabbit Jun 24, 2025
67baaca
Remove extra sep
danirabbit Jun 24, 2025
dcdfb97
Fix shadow clip
danirabbit Jun 24, 2025
f53c093
Fix pager click
danirabbit Jun 24, 2025
feb977f
Fix DnD
danirabbit Jun 24, 2025
44594b8
Merge master
danirabbit Jan 13, 2026
ca93c72
lint
danirabbit Jan 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/githubci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Install Dependencies
run: |
apt update
apt install -y libadwaita-1-dev libgee-0.8-dev libgranite-dev libgtk-3-dev libhandy-1-dev libjson-glib-dev libswitchboard-3-dev libwingpanel-dev libzeitgeist-2.0-dev meson valac bc
apt install -y libadwaita-1-dev libgee-0.8-dev libgranite-7-dev libgtk-4-dev libjson-glib-dev libswitchboard-3-dev libwingpanel-8-dev libzeitgeist-2.0-dev meson valac bc
- name: Build
env:
DESTDIR: out
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ Lightweight and stylish app launcher.
You'll need the following dependencies:
* bc
* gettext
* libadwaita-1-dev
* libgee-0.8-dev
* libgranite-dev >= 6.1.0
* libgtk-3-dev
* libhandy-1-dev >= 0.83.0
* libgranite-7-dev >= 7.6.0
* libgtk-4-dev
* libjson-glib-dev
* libswitchboard-3-dev
* libwingpanel-dev
* libwingpanel-8-dev
* libzeitgeist-2.0-dev
* meson
* pkg-config
Expand Down
8 changes: 4 additions & 4 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ add_project_arguments(
glib_dep = dependency('glib-2.0')
gee_dep = dependency('gee-0.8')
gio_dep = dependency('gio-2.0')
gtk_dep = dependency('gtk+-3.0')
granite_dep = dependency('granite', version: '>=6.1.0')
gtk_dep = dependency('gtk4')
granite_dep = dependency('granite-7', version: '>=6.1.0')
gobject_dep = dependency('gobject-2.0')
gio_unix_dep = dependency('gio-unix-2.0')
json_glib_dep = dependency('json-glib-1.0')
switchboard_dep = dependency('switchboard-3')
libhandy_dep = dependency('libhandy-1', version: '>= 0.83.0')
wingpanel_dep = dependency('wingpanel', version: '>=2.1.0')
libhandy_dep = dependency('libadwaita-1', version: '>= 0.83.0')
wingpanel_dep = dependency('wingpanel-8', version: '>=2.1.0')
posix_dep = meson.get_compiler('vala').find_library('posix')

zeitgeist_dep = []
Expand Down
17 changes: 11 additions & 6 deletions src/Backend/App.vala
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,14 @@ public class Slingshot.Backend.App : Object {
SYNAPSE
}

public const string ACTION_GROUP_PREFIX = "app-actions";
private const string ACTION_GROUP_PREFIX = "app-actions";
private const string ACTION_PREFIX = ACTION_GROUP_PREFIX + ".";
private const string APP_ACTION = "action.%s";
private const string PINNED_ACTION = "pinned";
private const string SWITCHEROO_ACTION = "switcheroo";
private const string UNINSTALL_ACTION = "uninstall";
private const string VIEW_ACTION = "view-in-appcenter";

public SimpleActionGroup action_group { get; private set; }
public string name { get; construct set; }
public string description { get; private set; default = ""; }
public string desktop_id { get; construct set; }
Expand Down Expand Up @@ -142,7 +141,7 @@ public class Slingshot.Backend.App : Object {
launched (this); // Emit launched signal

var context = Gdk.Display.get_default ().get_app_launch_context ();
context.set_timestamp (Gtk.get_current_event_time ());
context.set_timestamp (Gdk.CURRENT_TIME);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

from Marukesu:

In gtk4, we have Gtk.EventController.get_current_event_time(), so it's better to leave this as it is now or refactor the code to pass the time from the event handlers to the methods.

switcheroo_control.apply_gpu_environment (context, prefers_default_gpu);

new DesktopAppInfo (desktop_id).launch (null, context);
Expand Down Expand Up @@ -190,11 +189,11 @@ public class Slingshot.Backend.App : Object {
}
}

public GLib.Menu get_menu_model () {
public Gtk.PopoverMenu get_context_menu (Gtk.Widget parent) {
var actions_section = new GLib.Menu ();
var shell_section = new GLib.Menu ();

action_group = new SimpleActionGroup ();
var action_group = new SimpleActionGroup ();

var app_info = new DesktopAppInfo (desktop_id);
foreach (unowned var action in app_info.list_actions ()) {
Expand Down Expand Up @@ -293,7 +292,13 @@ public class Slingshot.Backend.App : Object {
model.append_section (null, actions_section);
model.append_section (null, shell_section);

return model;
var context_menu = new Gtk.PopoverMenu.from_model (model) {
has_arrow = false
};
context_menu.insert_action_group (ACTION_GROUP_PREFIX, action_group);
context_menu.set_parent (parent);

return context_menu;
}

private void action_uninstall () {
Expand Down
4 changes: 2 additions & 2 deletions src/Indicator.vala
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public class Slingshot.Indicator : Wingpanel.Indicator {
Intl.bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
Intl.bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");

weak Gtk.IconTheme default_theme = Gtk.IconTheme.get_default ();
weak Gtk.IconTheme default_theme = Gtk.IconTheme.get_for_display (Gdk.Display.get_default ());
default_theme.add_resource_path ("/io/elementary/desktop/wingpanel/applications-menu/icons");
}

Expand Down Expand Up @@ -75,7 +75,7 @@ public class Slingshot.Indicator : Wingpanel.Indicator {
var indicator_label = new Gtk.Label (_("Applications"));
indicator_label.vexpand = true;

var indicator_icon = new Gtk.Image.from_icon_name ("system-search-symbolic", Gtk.IconSize.MENU);
var indicator_icon = new Gtk.Image.from_icon_name ("system-search-symbolic");

indicator_grid = new Gtk.Grid ();
indicator_grid.attach (indicator_icon, 0, 0, 1, 1);
Expand Down
47 changes: 21 additions & 26 deletions src/SlingshotView.vala
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* 2011-2012 Giulio Collura
*/

public class Slingshot.SlingshotView : Gtk.Bin, UnityClient {
public class Slingshot.SlingshotView : Granite.Bin, UnityClient {
public signal void close_indicator ();

public Backend.AppSystem app_system;
Expand All @@ -25,8 +25,6 @@ public class Slingshot.SlingshotView : Gtk.Bin, UnityClient {
private Widgets.Grid grid_view;
private Widgets.SearchView search_view;
private Widgets.CategoryView category_view;
private Gtk.EventControllerKey key_controller;
private Gtk.EventControllerKey search_key_controller;

private static GLib.Settings settings { get; private set; default = null; }

Expand All @@ -41,27 +39,28 @@ public class Slingshot.SlingshotView : Gtk.Bin, UnityClient {
var grid_view_btn = new Gtk.ToggleButton () {
action_name = "view.view-mode",
action_target = new Variant.string ("grid"),
image = new Gtk.Image.from_icon_name ("view-grid-symbolic", BUTTON),
icon_name = "view-grid-symbolic",
tooltip_markup = Granite.markup_accel_tooltip ({"<Ctrl>1"}, _("View as Grid"))
};

var category_view_btn = new Gtk.ToggleButton () {
action_name = "view.view-mode",
action_target = new Variant.string ("category"),
image = new Gtk.Image.from_icon_name ("view-filter-symbolic", BUTTON),
icon_name = "view-filter-symbolic",
tooltip_markup = Granite.markup_accel_tooltip ({"<Ctrl>2"}, _("View by Category"))
};

var view_selector = new Gtk.Box (HORIZONTAL, 0) {
margin_end = 12
};
view_selector.add (grid_view_btn);
view_selector.add (category_view_btn);
view_selector.get_style_context ().add_class (Gtk.STYLE_CLASS_LINKED);
view_selector.append (grid_view_btn);
view_selector.append (category_view_btn);
view_selector.add_css_class (Granite.STYLE_CLASS_LINKED);

view_selector_revealer = new Gtk.Revealer () {
child = view_selector,
transition_type = SLIDE_RIGHT
transition_type = SLIDE_RIGHT,
overflow = VISIBLE
};

search_entry = new Gtk.SearchEntry () {
Expand All @@ -73,8 +72,8 @@ public class Slingshot.SlingshotView : Gtk.Bin, UnityClient {
margin_start = 12,
margin_end = 12
};
top_box.add (view_selector_revealer);
top_box.add (search_entry);
top_box.append (view_selector_revealer);
top_box.append (search_entry);

grid_view = new Widgets.Grid ();

Expand All @@ -93,8 +92,8 @@ public class Slingshot.SlingshotView : Gtk.Bin, UnityClient {
var container = new Gtk.Box (VERTICAL, 12) {
margin_top = 12
};
container.add (top_box);
container.add (stack);
container.append (top_box);
container.append (stack);

// This function must be after creating the page switcher
grid_view.populate (app_system);
Expand All @@ -116,22 +115,18 @@ public class Slingshot.SlingshotView : Gtk.Bin, UnityClient {
search.begin (search_entry.text, match, target);
});

key_press_event.connect ((event) => {
var search_handles_event = search_entry.handle_event (event);
if (search_handles_event && !search_entry.has_focus) {
search_entry.grab_focus ();
search_entry.move_cursor (BUFFER_ENDS, 0, false);
}

return search_handles_event;
});
search_entry.set_key_capture_widget (this);

key_controller = new Gtk.EventControllerKey (this);
var key_controller = new Gtk.EventControllerKey ();
key_controller.key_pressed.connect (on_key_press);

search_key_controller = new Gtk.EventControllerKey (search_entry);
add_controller (key_controller);

var search_key_controller = new Gtk.EventControllerKey ();
search_key_controller.key_pressed.connect (on_search_view_key_press);

search_entry.add_controller (search_key_controller);

// Showing a menu reverts the effect of the grab_device function.
search_entry.search_changed.connect (() => {
if (modality != Modality.SEARCH_VIEW) {
Expand Down Expand Up @@ -243,8 +238,8 @@ public class Slingshot.SlingshotView : Gtk.Bin, UnityClient {
return Gdk.EVENT_STOP;
}
}
// Alt accelerators
if ((state & Gdk.ModifierType.MOD1_MASK) != 0) {

if ((state & Gdk.ModifierType.ALT_MASK) != 0) {
switch (keyval) {
case Gdk.Key.F4:
close_indicator ();
Expand Down
19 changes: 19 additions & 0 deletions src/Utils.vala
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
namespace Slingshot.Utils {
public void menu_popup_on_keypress (Gtk.Popover popover) {
popover.halign = END;
popover.set_pointing_to (Gdk.Rectangle () {
x = (int) popover.parent.get_width (),
y = (int) popover.parent.get_height () / 2
});
popover.popup ();
}

public void menu_popup_at_pointer (Gtk.Popover popover, double x, double y) {
var rect = Gdk.Rectangle () {
x = (int) x,
y = (int) y
};
popover.pointing_to = rect;
popover.popup ();
}
}
Loading
Loading