aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2026-04-11 22:10:10 +1200
committerArslaan Pathan <[email protected]>2026-04-11 22:10:10 +1200
commit44f2b5b980f4952124f2c5a78a03df0b09bb6395 (patch)
tree3eb2c9e48f0c41d345c9801fc9333675801b55ac /main.c
parent94a741c456b73ac44615406ad55069ee9d02d77f (diff)
downloadcinnamon-browser-44f2b5b980f4952124f2c5a78a03df0b09bb6395.tar.xz
cinnamon-browser-44f2b5b980f4952124f2c5a78a03df0b09bb6395.zip
add quickmarks, finally, a daily drive-able browser!
Diffstat (limited to 'main.c')
-rw-r--r--main.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/main.c b/main.c
index a902461..bba6baa 100644
--- a/main.c
+++ b/main.c
@@ -7,6 +7,7 @@ This software is licensed under the ARPL. See LICENSE for details.
#include <cairo.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <stdio.h>
+#include <stdlib.h>
/* forward declare BEFORE including config.h so that config.h can reference them */
typedef struct {
@@ -28,18 +29,96 @@ typedef struct {
void (*fptr)(Cinnamon*, const char *args);
} Command;
+typedef struct Quickmark {
+ char *name;
+ char *url;
+ struct Quickmark *next;
+} Quickmark;
+
#include "config.h"
/* 0 = normal mode, 1 = insert, 2 = passthrough, 3 = hint */
static int mode = 0;
bool cmdbar_focused = false;
+
+/* hinting */
static char hint_buffer[16] = {0};
static int hint_mode_active = 0;
void (*hint_callback)(Cinnamon* cinnamon, char hint_buffer[16]);
+/* quickmarks */
+static Quickmark* quickmarks = NULL;
+
/* some forward declarations */
void cancel_hint_mode(Cinnamon* cinnamon);
+void quickmark_add(Cinnamon* cinnamon, const char* name, const char* url) {
+ Quickmark* curr = quickmarks;
+ while (curr) {
+ if (strcmp(curr->name, name) == 0) {
+ free(curr->url);
+ curr->url = strdup(url);
+ return;
+ }
+ curr = curr->next;
+ }
+
+ Quickmark* new = malloc(sizeof(Quickmark));
+ new->name = strdup(name);
+ new->url = strdup(url);
+ new->next = quickmarks;
+ quickmarks = new;
+}
+
+void quickmark_load(Cinnamon* cinnamon, const char* name) {
+ Quickmark* curr = quickmarks;
+ while (curr) {
+ if (strcmp(curr->name, name) == 0) {
+ GtkWidget *webview = gtk_notebook_get_nth_page(GTK_NOTEBOOK(cinnamon->notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(cinnamon->notebook)));
+ webkit_web_view_load_uri(WEBKIT_WEB_VIEW(webview), curr->url);
+ return;
+ }
+ curr = curr->next;
+ }
+}
+
+void quickmark_save_all(void) {
+ char *path = g_build_filename(g_get_user_data_dir(), "cinnamon", QUICKMARK_FILE, NULL);
+ FILE *f = fopen(path, "w");
+ if (!f) return;
+
+ Quickmark *curr = quickmarks;
+ while (curr) {
+ fprintf(f, "%s\n%s\n", curr->name, curr->url);
+ curr = curr->next;
+ }
+ fclose(f);
+ g_free(path);
+}
+
+void quickmark_load_all(void) {
+ char *path = g_build_filename(g_get_user_data_dir(), "cinnamon", QUICKMARK_FILE, NULL);
+ FILE *f = fopen(path, "r");
+ if (!f) {
+ g_free(path);
+ return;
+ }
+
+ char name[256], url[4096];
+ while (fgets(name, sizeof(name), f) && fgets(url, sizeof(url), f)) {
+ name[strcspn(name, "\n")] = 0;
+ url[strcspn(url, "\n")] = 0;
+
+ Quickmark *new = malloc(sizeof(Quickmark));
+ new->name = strdup(name);
+ new->url = strdup(url);
+ new->next = quickmarks;
+ quickmarks = new;
+ }
+ fclose(f);
+ g_free(path);
+}
+
static void parse_keybind(const char *key, guint *keyval, GdkModifierType *mods) {
char name[32];
const char *start;
@@ -296,6 +375,9 @@ int main(int argc, char *argv[]) {
/* favicon db */
webkit_web_context_set_favicon_database_directory(cinnamon.web_context, g_build_filename(g_get_user_cache_dir(), "cinnamon", "favicons", NULL));
+ /* load quickmarks! */
+ quickmark_load_all();
+
/* Create initial tab */
tabopen(&cinnamon);