Skip to content

Commit 20b3ae7

Browse files
authored
Merge pull request #861 from mjakeman/new-api
Port to GNOME Extensions v1 API
2 parents 317da42 + 66d9d98 commit 20b3ae7

35 files changed

Lines changed: 1585 additions & 712 deletions

build-aux/com.mattjakeman.ExtensionManager.Devel.json

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,6 @@
2626
"*.a"
2727
],
2828
"modules" : [
29-
{
30-
"name" : "blueprint-compiler",
31-
"builddir" : true,
32-
"buildsystem" : "meson",
33-
"cleanup" : [
34-
"*"
35-
],
36-
"sources" : [
37-
{
38-
"type" : "git",
39-
"url" : "https://gitlab.gnome.org/jwestman/blueprint-compiler.git",
40-
"commit" : "04ef0944db56ab01307a29aaa7303df6067cb3c0",
41-
"tag" : "v0.16.0"
42-
}
43-
]
44-
},
4529
{
4630
"name" : "libbacktrace",
4731
"builddir" : true,

data/com.mattjakeman.ExtensionManager.gschema.xml.in

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,5 @@
1919
<summary>Sort Enabled First</summary>
2020
<description>Display enabled extensions first in the installed view.</description>
2121
</key>
22-
<key name="show-unsupported" type="b">
23-
<default>false</default>
24-
<summary>Show Unsupported</summary>
25-
<description>Show extensions which do not support the current version of GNOME.</description>
26-
</key>
2722
</schema>
2823
</schemalist>

src/exm-application.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,6 @@ exm_application_init (ExmApplication *self)
242242
GAction *sort_enabled_first_action = g_settings_create_action (settings, "sort-enabled-first");
243243
g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (sort_enabled_first_action));
244244

245-
GAction *show_unsupported_action = g_settings_create_action (settings, "show-unsupported");
246-
g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (show_unsupported_action));
247-
248245
g_object_unref (settings);
249246

250247
const char *accels_quit[] = {"<primary>q", NULL};

src/exm-browse-page.blp

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ template $ExmBrowsePage: Gtk.Widget {
2424

2525
Gtk.Box {
2626
styles [
27-
"linked"
27+
"linked",
2828
]
2929

3030
Gtk.SearchEntry search_entry {
@@ -39,15 +39,21 @@ template $ExmBrowsePage: Gtk.Widget {
3939
}
4040
}
4141

42+
Gtk.Button order_btn {
43+
clicked => $on_order_button_clicked();
44+
icon-name: "view-sort-descending-symbolic";
45+
tooltip-text: _("Descending Order");
46+
}
47+
4248
// Keep the same order as the ExmSearchSort enum
4349
Gtk.DropDown search_dropdown {
4450
model: StringList {
4551
// Translators: dropdown items for sorting search results
4652
strings [
47-
_("Relevance"),
53+
_("Popularity"),
54+
_("Created"),
4855
C_("Sort search results", "Downloads"),
49-
_("Recent"),
50-
_("Name")
56+
_("Updated"),
5157
]
5258
};
5359

@@ -65,7 +71,7 @@ template $ExmBrowsePage: Gtk.Widget {
6571

6672
child: Adw.Spinner {
6773
styles [
68-
"dimmed"
74+
"dimmed",
6975
]
7076

7177
margin-top: 30;
@@ -85,15 +91,15 @@ template $ExmBrowsePage: Gtk.Widget {
8591

8692
Gtk.ListBox search_results {
8793
styles [
88-
"boxed-list"
94+
"boxed-list",
8995
]
9096

9197
selection-mode: none;
9298
}
9399

94100
Gtk.ListBox more_results_list {
95101
styles [
96-
"boxed-list"
102+
"boxed-list",
97103
]
98104

99105
selection-mode: none;
@@ -120,7 +126,7 @@ template $ExmBrowsePage: Gtk.Widget {
120126

121127
Gtk.Image {
122128
styles [
123-
"dimmed"
129+
"dimmed",
124130
]
125131

126132
icon-name: "edit-find-symbolic";
@@ -131,7 +137,7 @@ template $ExmBrowsePage: Gtk.Widget {
131137

132138
Gtk.Label {
133139
styles [
134-
"title-1"
140+
"title-1",
135141
]
136142

137143
label: _("No Results Found");
@@ -161,7 +167,7 @@ template $ExmBrowsePage: Gtk.Widget {
161167

162168
Gtk.Image {
163169
styles [
164-
"dimmed"
170+
"dimmed",
165171
]
166172

167173
icon-name: "offline-symbolic";
@@ -172,7 +178,7 @@ template $ExmBrowsePage: Gtk.Widget {
172178

173179
Gtk.Label {
174180
styles [
175-
"title-1"
181+
"title-1",
176182
]
177183

178184
label: _("Connection Error");

src/exm-browse-page.c

Lines changed: 51 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ struct _ExmBrowsePage
4343
GtkStringList *suggestions;
4444
GListModel *search_results_model;
4545

46-
int current_page;
47-
int max_pages;
46+
gchar *next_page;
4847

4948
GCancellable *cancellable;
5049

@@ -54,6 +53,7 @@ struct _ExmBrowsePage
5453
GtkSearchEntry *search_entry;
5554
GtkListBox *search_results;
5655
GtkStack *search_stack;
56+
GtkButton *order_btn;
5757
GtkDropDown *search_dropdown;
5858
GtkListBox *more_results_list;
5959
AdwButtonRow *more_results_btn;
@@ -144,7 +144,7 @@ static void
144144
update_load_more_btn (ExmBrowsePage *self)
145145
{
146146
// Hide button if we are the last page
147-
gtk_widget_set_visible (GTK_WIDGET (self->more_results_list), self->current_page != self->max_pages);
147+
gtk_widget_set_visible (GTK_WIDGET (self->more_results_list), self->next_page != NULL);
148148

149149
// Make it clickable
150150
gtk_widget_set_sensitive (GTK_WIDGET (self->more_results_btn), TRUE);
@@ -179,7 +179,7 @@ on_first_page_result (GObject *source,
179179
GError *error = NULL;
180180
GListModel *to_append;
181181

182-
to_append = exm_search_provider_query_finish (EXM_SEARCH_PROVIDER (source), res, &self->max_pages, &error);
182+
to_append = exm_search_provider_query_finish (EXM_SEARCH_PROVIDER (source), res, &self->next_page, &error);
183183

184184
if (error)
185185
{
@@ -214,7 +214,7 @@ on_next_page_result (GObject *source,
214214
int n_items;
215215
int i;
216216

217-
to_append = exm_search_provider_query_finish (EXM_SEARCH_PROVIDER (source), res, &self->max_pages, &error);
217+
to_append = exm_search_provider_query_finish (EXM_SEARCH_PROVIDER (source), res, &self->next_page, &error);
218218

219219
if (G_IS_LIST_MODEL (to_append))
220220
{
@@ -260,19 +260,15 @@ static void
260260
on_load_more_results (AdwButtonRow *row G_GNUC_UNUSED,
261261
ExmBrowsePage *self)
262262
{
263-
const char *query;
264-
ExmSearchSort sort;
265263
gtk_widget_set_sensitive (GTK_WIDGET (self->more_results_btn), FALSE);
266264

267265
// If we have a current operation, cancel it
268266
g_cancellable_cancel (self->cancellable);
269267
self->cancellable = g_cancellable_new ();
270268

271-
query = gtk_editable_get_text (GTK_EDITABLE (self->search_entry));
272-
sort = (ExmSearchSort) gtk_drop_down_get_selected (self->search_dropdown);
273-
exm_search_provider_query_async (self->search, query, ++self->current_page, sort, self->cancellable,
274-
(GAsyncReadyCallback) on_next_page_result,
275-
self);
269+
exm_search_provider_query_next_async (self->search, self->next_page, self->cancellable,
270+
(GAsyncReadyCallback) on_next_page_result,
271+
self);
276272
}
277273

278274
static void
@@ -282,7 +278,6 @@ search (ExmBrowsePage *self,
282278
{
283279
// Show Loading Indicator
284280
gtk_stack_set_visible_child_name (self->search_stack, "page_spinner");
285-
self->current_page = 1;
286281

287282
if (self->search_results_model)
288283
g_clear_object (&self->search_results_model);
@@ -291,7 +286,7 @@ search (ExmBrowsePage *self,
291286
g_cancellable_cancel (self->cancellable);
292287
self->cancellable = g_cancellable_new ();
293288

294-
exm_search_provider_query_async (self->search, query, 1, sort, self->cancellable,
289+
exm_search_provider_query_async (self->search, query, sort, self->cancellable,
295290
(GAsyncReadyCallback) on_first_page_result,
296291
self);
297292
}
@@ -317,9 +312,48 @@ on_search_changed (ExmBrowsePage *self)
317312

318313
const char *query = gtk_editable_get_text (GTK_EDITABLE (self->search_entry));
319314
ExmSearchSort sort = (ExmSearchSort) gtk_drop_down_get_selected (self->search_dropdown);
315+
const char *icon_name = gtk_button_get_icon_name (self->order_btn);
316+
if (g_strcmp0 (icon_name, "view-sort-ascending-symbolic") == 0)
317+
{
318+
switch (sort)
319+
{
320+
case EXM_SEARCH_SORT_CREATED_DES:
321+
sort = EXM_SEARCH_SORT_CREATED_ASC;
322+
break;
323+
case EXM_SEARCH_SORT_DOWNLOADS_DES:
324+
sort = EXM_SEARCH_SORT_DOWNLOADS_ASC;
325+
break;
326+
case EXM_SEARCH_SORT_UPDATED_DES:
327+
sort = EXM_SEARCH_SORT_UPDATED_ASC;
328+
break;
329+
case EXM_SEARCH_SORT_POPULARITY_DES:
330+
default:
331+
sort = EXM_SEARCH_SORT_POPULARITY_ASC;
332+
}
333+
}
320334
search (self, query, sort);
321335
}
322336

337+
static void
338+
on_order_button_clicked (GtkButton *button,
339+
ExmBrowsePage *self)
340+
{
341+
const char *icon_name = gtk_button_get_icon_name (button);
342+
343+
if (g_strcmp0 (icon_name, "view-sort-descending-symbolic") == 0)
344+
{
345+
gtk_button_set_icon_name (button, "view-sort-ascending-symbolic");
346+
gtk_widget_set_tooltip_text (GTK_WIDGET (button), _("Ascending Order"));
347+
}
348+
else
349+
{
350+
gtk_button_set_icon_name (button, "view-sort-descending-symbolic");
351+
gtk_widget_set_tooltip_text (GTK_WIDGET (button), _("Descending Order"));
352+
}
353+
354+
on_search_changed (self);
355+
}
356+
323357
static void
324358
on_search_entry_realize (GtkSearchEntry *search_entry,
325359
ExmBrowsePage *self)
@@ -337,14 +371,13 @@ on_search_entry_realize (GtkSearchEntry *search_entry,
337371
gtk_search_entry_set_placeholder_text (search_entry, suggestion);
338372

339373
// Fire off a default search
340-
search (self, "", EXM_SEARCH_SORT_RELEVANCE);
374+
search (self, "", EXM_SEARCH_SORT_POPULARITY_DES);
341375
}
342376

343377
static void
344378
on_bind_manager (ExmBrowsePage *self)
345379
{
346380
GListModel *ext_model;
347-
gchar *shell_version;
348381

349382
g_object_get (self->manager,
350383
"extensions", &ext_model,
@@ -355,13 +388,6 @@ on_bind_manager (ExmBrowsePage *self)
355388
G_CALLBACK (refresh_search),
356389
self);
357390

358-
g_object_get (self->manager,
359-
"shell-version",
360-
&shell_version,
361-
NULL);
362-
363-
g_object_set (self->search, "shell-version", shell_version, NULL);
364-
365391
refresh_search (self);
366392
}
367393

@@ -425,12 +451,14 @@ exm_browse_page_class_init (ExmBrowsePageClass *klass)
425451
gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, search_entry);
426452
gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, search_results);
427453
gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, search_stack);
454+
gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, order_btn);
428455
gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, search_dropdown);
429456
gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, more_results_list);
430457
gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, more_results_btn);
431458
gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, error_label);
432459

433460
gtk_widget_class_bind_template_callback (widget_class, on_search_entry_realize);
461+
gtk_widget_class_bind_template_callback (widget_class, on_order_button_clicked);
434462
gtk_widget_class_bind_template_callback (widget_class, on_search_changed);
435463
gtk_widget_class_bind_template_callback (widget_class, on_load_more_results);
436464
gtk_widget_class_bind_template_callback (widget_class, on_bind_manager);
@@ -441,25 +469,10 @@ exm_browse_page_class_init (ExmBrowsePageClass *klass)
441469
static void
442470
exm_browse_page_init (ExmBrowsePage *self)
443471
{
444-
GSettings *settings;
445472
gtk_widget_init_template (GTK_WIDGET (self));
446473

447474
self->search = exm_search_provider_new ();
448475

449-
settings = g_settings_new (APP_ID);
450-
451-
g_settings_bind (settings, "show-unsupported",
452-
self->search, "show-unsupported",
453-
G_SETTINGS_BIND_GET);
454-
455-
g_object_unref (settings);
456-
457-
// Rerun search when show unsupported is toggled
458-
g_signal_connect_swapped (self->search,
459-
"notify::show-unsupported",
460-
G_CALLBACK (on_search_changed),
461-
self);
462-
463476
load_suggestions (self);
464477

465478
gtk_search_entry_set_key_capture_widget (self->search_entry, GTK_WIDGET (self));

0 commit comments

Comments
 (0)