summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcadmio <gioresta87@gmail.com>2023-10-21 10:17:19 +0200
committercadmio <gioresta87@gmail.com>2023-10-21 10:17:19 +0200
commit6b30634535d61cddd7e4e2b8ffd4141ba4b6c950 (patch)
treec3933fd1f8774741cb8ecb114562a6800f072c65
parentd35b2cfd6acaae3abd5e4054eaad59981d262ae8 (diff)
downloadlitos4-6b30634535d61cddd7e4e2b8ffd4141ba4b6c950.tar.gz
litos4-6b30634535d61cddd7e4e2b8ffd4141ba4b6c950.tar.bz2
litos4-6b30634535d61cddd7e4e2b8ffd4141ba4b6c950.zip
update all
-rw-r--r--Makefile22
-rw-r--r--litos.pngbin0 -> 2168 bytes
-rw-r--r--litosaccels.c42
-rw-r--r--litosapp.c15
-rw-r--r--litosappwin.c130
-rw-r--r--litosfile.c27
-rw-r--r--main.c2
-rw-r--r--meson.build20
-rw-r--r--org.litos.gtk.desktop10
9 files changed, 169 insertions, 99 deletions
diff --git a/Makefile b/Makefile
index 16840c1..ccb6563 100644
--- a/Makefile
+++ b/Makefile
@@ -5,9 +5,18 @@ LIBS = $(shell $(PKGCONFIG) --libs gtk4 gtksourceview-5)
GLIB_COMPILE_RESOURCES = $(shell $(PKGCONFIG) --variable=glib_compile_resources gio-2.0)
GLIB_COMPILE_SCHEMAS = $(shell $(PKGCONFIG) --variable=glib_compile_schemas gio-2.0)
+PREFIX ?= /usr
+BINDIR ?= $(PREFIX)/local/bin/
+DESKTOPDIR ?= $(PREFIX)/share/applications/
+ICONDIR ?= $(PREFIX)/share/pixmaps
+ICON = litos.png
+DESKTOP = org.litos.gtk.desktop
+SCHEMA = org.gtk.litos.gschema.xml
+SCHEMADIR = /usr/share/glib-2.0/schemas
+
SRC = litosapp.c litosappwin.c sourceview.c litosappprefs.c litosaccels.c litosfile.c main.c
BUILT_SRC = resources.c
-
+TARGET = litos
OBJS = $(BUILT_SRC:.c=.o) $(SRC:.c=.o)
all: litos
@@ -33,3 +42,14 @@ clean:
rm -f $(BUILT_SRC)
rm -f $(OBJS)
rm -f litos
+
+uninstall:
+ rm -f $(DESKTOPDIR)$(DESKTOP)
+ rm -f $(ICONDIR)$(ICON)
+ rm -f $(BINDIR)$(TARGET)
+install:
+ install $(TARGET) $(BINDIR)
+ install $(DESKTOP) $(DESKTOPDIR)
+ install $(ICON) $(ICONDIR)
+ install $(SCHEMA) $(SCHEMADIR)
+ $(GLIB_COMPILE_SCHEMAS) $(SCHEMADIR)
diff --git a/litos.png b/litos.png
new file mode 100644
index 0000000..9b57b78
--- /dev/null
+++ b/litos.png
Binary files differ
diff --git a/litosaccels.c b/litosaccels.c
index 22e26ea..f65dc9c 100644
--- a/litosaccels.c
+++ b/litosaccels.c
@@ -4,21 +4,20 @@
#include "litosappprefs.h"
#include "litosfile.h"
-gboolean litos_file_load (LitosFile *file, GError **error);
+gboolean litos_file_load (GFile *file, GtkTextBuffer *buffer, GError **error);
+void litos_file_highlight_buffer(LitosFile *file);
GtkTextBuffer *litos_file_get_buffer(LitosFile *file);
GFile *litos_file_get_gfile(LitosFile* file);
+void litos_file_reset_gfile(LitosFile *file);
+void litos_file_set_gfile(LitosFile *file, GFile *gfile);
gchar *litos_file_get_name(LitosFile *file);
-void litos_file_set_saved(LitosFile* file);
gboolean litos_app_window_remove_child(LitosAppWindow *win);
void litos_app_window_save(LitosAppWindow *win, LitosFile *file);
void litos_app_window_save_as(LitosAppWindow *app);
-
-LitosFile * litos_app_window_new_tab(LitosAppWindow *win);
LitosFile * litos_app_window_open(LitosAppWindow *win, GFile *gf);
-LitosFile * litos_app_window_open_tmpl(LitosAppWindow *win, GFile *gf);
-
LitosFile * litos_app_window_current_file(LitosAppWindow *win);
+LitosFile * litos_app_window_new_file(LitosAppWindow *win);
guint litos_app_window_get_array_len(LitosAppWindow *win);
gboolean litos_app_window_quit (GtkWindow *window, gpointer user_data);
@@ -27,24 +26,21 @@ void litos_app_error_dialog(GtkWindow *window, GError *error, char *filename);
gboolean litos_app_check_duplicate(char *filename, LitosAppWindow *win);
static void
-open_cb (GtkWidget *dialog, gint response, gpointer win)
+open_cb (GtkWidget *dialog, gint response, gpointer window)
{
if (response == GTK_RESPONSE_ACCEPT)
{
- GError *error = NULL;
GFile *gfile = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
- LitosAppWindow *lwin = LITOS_APP_WINDOW(win);
+ LitosAppWindow *win = LITOS_APP_WINDOW(window);
if (gfile != NULL)
{
char *gfile_name = g_file_get_path(gfile);
- if (!litos_app_check_duplicate(gfile_name,lwin))
+ if (!litos_app_check_duplicate(gfile_name,win))
{
- LitosFile *file = litos_app_window_open(lwin,gfile);
- if (!litos_file_load(file,&error))
- litos_app_error_dialog(GTK_WINDOW(win), error, gfile_name);
+ LitosFile * file = litos_app_window_open(win, gfile);
}
g_free(gfile_name);
@@ -91,24 +87,18 @@ open_activated(GSimpleAction *action, GVariant *parameter, gpointer app)
}
static void
-open_tmpl_cb (GtkWidget *dialog, gint response, gpointer win)
+open_tmpl_cb (GtkWidget *dialog, gint response, gpointer window)
{
if (response == GTK_RESPONSE_ACCEPT)
{
- GError *error = NULL;
GFile *gfile = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
- LitosAppWindow *lwin = LITOS_APP_WINDOW(win);
+ LitosAppWindow *win = LITOS_APP_WINDOW(window);
if (gfile != NULL)
{
- LitosFile * file = litos_app_window_new_tab(LITOS_APP_WINDOW(win));
-
- char *contents;
-
- g_file_get_contents (g_file_get_path(gfile), &contents, NULL, NULL);
-
- gtk_text_buffer_set_text (litos_file_get_buffer(file), contents, strlen(contents));
+ LitosFile * file = litos_app_window_open(win, gfile);
+ litos_file_reset_gfile(file);
}
}
@@ -164,7 +154,6 @@ save_as_dialog (GSimpleAction *action, GVariant *parameter, gpointer app)
litos_app_window_save_as(LITOS_APP_WINDOW(win));
}
-
static void
preferences_activated (GSimpleAction *action,
GVariant *parameter,
@@ -202,8 +191,9 @@ new_file (GSimpleAction *action,
GVariant *parameter,
gpointer app)
{
- GtkWindow *win = gtk_application_get_active_window (GTK_APPLICATION (app));
- litos_app_window_new_tab(LITOS_APP_WINDOW(win));
+ GtkWindow *window = gtk_application_get_active_window (GTK_APPLICATION (app));
+ LitosAppWindow *win = LITOS_APP_WINDOW(window);
+ LitosFile * file = litos_app_window_new_file(win);
}
/* Called when Ctrl+B, Ctrl+i, etc is toggled */
diff --git a/litosapp.c b/litosapp.c
index 24e3b8d..65ed722 100644
--- a/litosapp.c
+++ b/litosapp.c
@@ -6,11 +6,9 @@
#include "litosfile.h"
void setAccels (GApplication *app);
-gboolean litos_file_load (LitosFile *file, GError **error);
+LitosFile * litos_app_window_open(LitosAppWindow *win, GFile *gf);
GFile *litos_file_get_gfile(LitosFile* file);
-LitosFile * litos_app_window_new_tab(LitosAppWindow *win, GFile *gf);
-LitosFile * litos_app_window_open(LitosAppWindow *win, GFile *gf);
guint litos_app_window_get_array_len(LitosAppWindow *win);
LitosFile * litos_app_window_get_file(LitosAppWindow *win, int *i);
GtkNotebook * litos_app_window_get_nb(LitosAppWindow *win);
@@ -66,15 +64,6 @@ litos_app_activate (GApplication *app)
gtk_window_present (window);
}
-void litos_app_error_dialog(GtkWindow *window, GError *error, char *filename)
-{
- GtkWidget *message_dialog;
- message_dialog = gtk_message_dialog_new(window, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE, "ERROR : Can't load %s.\n %s", filename, error->message);
- gtk_widget_show(message_dialog);
- g_error_free(error);
-}
-
gboolean litos_app_check_duplicate(char *filename, LitosAppWindow *win)
{
GFile *current_gfile;
@@ -134,8 +123,6 @@ litos_app_open (GApplication *app,
if (!litos_app_check_duplicate(filename,win))
{
LitosFile *litos_file = litos_app_window_open(win,files[i]);
- if (!litos_file_load(litos_file,&error))
- litos_app_error_dialog(GTK_WINDOW(win), error, filename);
}
g_free(filename);
diff --git a/litosappwin.c b/litosappwin.c
index df0ba57..46a9d0b 100644
--- a/litosappwin.c
+++ b/litosappwin.c
@@ -10,13 +10,14 @@ GFile *litos_file_get_gfile(LitosFile* file);
gboolean litos_file_save(LitosFile *file, GError *error);
void litos_file_save_as(LitosFile* file, GFile *new_file);
gchar *litos_file_get_name(LitosFile *file);
+void litos_file_highlight_buffer(LitosFile *file);
LitosFile * litos_file_set(struct Page *page);
gboolean litos_file_get_saved(LitosFile *file);
GtkWidget * litos_file_get_view(LitosFile *file);
GtkWidget * litos_file_get_lbl(LitosFile *file);
GtkWidget * litos_file_get_tabbox(LitosFile *file);
-GtkWidget * litos_file_get_close_box(LitosFile *file);
+gboolean litos_file_load (LitosFile *file, GError **error);
GtkWidget* MyNewSourceview();
@@ -379,6 +380,8 @@ litos_app_window_init (LitosAppWindow *win)
win->search_context = NULL;
win->litosFileList = g_ptr_array_new_full(0, g_object_unref);
+ //g_signal_connect (win->settings, "changed::font-desc", G_CALLBACK (litos_app_window_font_changed_cb), win->litosFileList);
+
g_signal_connect (GTK_WINDOW(win), "close-request", G_CALLBACK (litos_app_window_quit), win);
g_signal_connect (win->down_search, "clicked", G_CALLBACK(next_match), win);
//g_signal_connect (win->up_search, "clicked", G_CALLBACK(previous_match), win);
@@ -449,7 +452,8 @@ void litos_app_window_save_as(LitosAppWindow *win)
litos_app_window_save_as_dialog(NULL, NULL, win);
}
-static void close_btn_clicked(GtkWidget *close_btn, gpointer user_data)
+static void
+close_btn_clicked(GtkWidget *close_btn, gpointer user_data)
{
LitosAppWindow *win = LITOS_APP_WINDOW(user_data);
litos_app_window_remove_child(win);
@@ -457,14 +461,56 @@ static void close_btn_clicked(GtkWidget *close_btn, gpointer user_data)
g_signal_handlers_disconnect_by_func(close_btn, close_btn_clicked, win);
}
-static LitosFile * litos_app_window_set_page(LitosAppWindow *win, struct Page *page)
+static void
+lblToColor(LitosAppWindow *win, LitosFile* file, const char *color)
{
- GtkTextTag *tag;
- GtkWidget *close_btn;
+ const char *markup = g_markup_printf_escaped ("<span color='%s'>\%s</span>", color, litos_file_get_name(file));
+
+ gtk_label_set_markup (GTK_LABEL(litos_file_get_lbl(file)), markup);
+}
+
+static void
+_file_monitor_saved_change(GObject *gobject, GParamSpec *pspec, gpointer win)
+{
+ LitosAppWindow *lwin = LITOS_APP_WINDOW(win);
+ LitosFile *file = LITOS_FILE(gobject);
+
+ if (litos_file_get_saved(file) == FALSE)
+ lblToColor(lwin, file, "red");
+
+ else
+ lblToColor(lwin, file, "gray");
+}
+
+void litos_app_error_dialog(GtkWindow *window, GError *error, char *filename)
+{
+ GtkWidget *message_dialog;
+ message_dialog = gtk_message_dialog_new(window, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE, "ERROR : Can't load %s.\n %s", filename, error->message);
+ gtk_widget_show(message_dialog);
+ g_error_free(error);
+}
+void litos_app_window_apply_tag(LitosAppWindow *win, GtkTextBuffer *buffer)
+{
+ GtkTextTag *tag;
GtkTextIter start_iter, end_iter;
+ tag = gtk_text_buffer_create_tag (buffer, NULL, NULL);
+
+ g_settings_bind (win->settings, "font",
+ tag, "font",
+ G_SETTINGS_BIND_DEFAULT);
+
+ gtk_text_buffer_get_start_iter (buffer, &start_iter);
+ gtk_text_buffer_get_end_iter (buffer, &end_iter);
+ gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter);
+}
+
+static LitosFile *
+litos_app_window_new_tab(LitosAppWindow *win, struct Page *page)
+{
+ GtkWidget *close_btn, *lbl;
- page->lbl = gtk_label_new(page->name);
page->tabbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
page->close_btn_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
page->scrolled = gtk_scrolled_window_new ();
@@ -477,9 +523,14 @@ static LitosFile * litos_app_window_set_page(LitosAppWindow *win, struct Page *p
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (page->scrolled), page->view);
+ page->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (page->view));
+
+ page->lbl = gtk_label_new(page->name);
+
+ LitosFile *file = litos_file_set(page);
+
gtk_box_append (GTK_BOX(page->close_btn_box), page->lbl);
gtk_box_append (GTK_BOX(page->close_btn_box), close_btn);
-
gtk_box_append (GTK_BOX(page->tabbox), page->scrolled);
gtk_notebook_set_current_page (
@@ -487,76 +538,61 @@ static LitosFile * litos_app_window_set_page(LitosAppWindow *win, struct Page *p
gtk_notebook_append_page_menu (win->notebook, page->tabbox, page->close_btn_box, page->close_btn_box)
);
- page->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (page->view));
- tag = gtk_text_buffer_create_tag (page->buffer, NULL, NULL);
-
- g_settings_bind (win->settings, "font",
- tag, "font",
- G_SETTINGS_BIND_DEFAULT);
-
- gtk_text_buffer_get_start_iter (page->buffer, &start_iter);
- gtk_text_buffer_get_end_iter (page->buffer, &end_iter);
- gtk_text_buffer_apply_tag (page->buffer, tag, &start_iter, &end_iter);
+ gtk_widget_grab_focus(GTK_WIDGET(page->view));
gtk_notebook_set_tab_reorderable(win->notebook, page->tabbox, TRUE);
g_signal_connect(close_btn, "clicked",
- G_CALLBACK(close_btn_clicked), win);
-
- gtk_widget_grab_focus(GTK_WIDGET(page->view));
-
- LitosFile *file = litos_file_set(page);
+ G_CALLBACK(close_btn_clicked), win);
g_ptr_array_add(win->litosFileList, file);
return file;
}
-static void lblToColor(LitosAppWindow *win, LitosFile* file, const char *color)
-{
- const char *markup = g_markup_printf_escaped ("<span color='%s'>\%s</span>", color, litos_file_get_name(file));
-
- gtk_label_set_markup (GTK_LABEL(litos_file_get_lbl(file)), markup);
-}
-
-static void _file_monitor_saved_change(GObject *gobject, GParamSpec *pspec, gpointer win)
-{
- LitosAppWindow *lwin = LITOS_APP_WINDOW(win);
- LitosFile *file = LITOS_FILE(gobject);
-
- if (litos_file_get_saved(file) == FALSE)
- lblToColor(lwin, file, "red");
-
- else
- lblToColor(lwin, file, "gray");
-}
-
LitosFile * litos_app_window_open(LitosAppWindow *win, GFile *gf)
{
struct Page page;
+ GError *error = NULL;
+
page.name = g_file_get_basename(gf);
page.gf = gf;
- LitosFile *file = litos_app_window_set_page(win,&page);
+ LitosFile *file = litos_app_window_new_tab(win,&page);
- g_signal_connect(G_OBJECT(file), "notify::saved", G_CALLBACK (_file_monitor_saved_change), win);
+ if (!litos_file_load(file,&error))
+ {
+ litos_app_error_dialog(GTK_WINDOW(win), error, page.name);
+ return NULL;
+ }
- return file;
+ else
+ {
+ litos_file_highlight_buffer(file);
+
+ litos_app_window_apply_tag(win, page.buffer);
+
+ g_signal_connect(G_OBJECT(file), "notify::saved", G_CALLBACK (_file_monitor_saved_change), win);
+
+ return file;
+ }
}
-LitosFile * litos_app_window_new_tab(LitosAppWindow *win)
+LitosFile * litos_app_window_new_file(LitosAppWindow *win)
{
int file_index = litos_app_window_get_array_len(win) + 1;
struct Page page;
page.name = g_strdup_printf("Untitled %d", file_index);
- file_index++;
+
page.gf = NULL;
- LitosFile *file = litos_app_window_set_page(win,&page);
+ LitosFile *file = litos_app_window_new_tab(win,&page);
+
+ litos_app_window_apply_tag(win, page.buffer);
g_signal_connect(G_OBJECT(file), "notify::saved", G_CALLBACK (_file_monitor_saved_change), win);
diff --git a/litosfile.c b/litosfile.c
index bc571d5..acf0e33 100644
--- a/litosfile.c
+++ b/litosfile.c
@@ -147,6 +147,11 @@ LitosFile *litos_file_new()
return g_object_new (LITOS_TYPE_FILE, NULL);
}
+void litos_file_set_gfile(LitosFile *file, GFile *gfile)
+{
+ file->gfile = gfile;
+}
+
GtkWidget * litos_file_get_lbl(LitosFile *file)
{
return file->lbl;
@@ -177,11 +182,21 @@ gboolean litos_file_get_saved(LitosFile *file)
return file->saved;
}
+void litos_file_reset_gfile(LitosFile *file)
+{
+ file->gfile = NULL;
+}
+
GtkWidget * litos_file_get_tabbox(LitosFile *file)
{
return file->tabbox;
}
+void litos_file_set_saved(LitosFile *file)
+{
+ file->saved = TRUE;
+}
+
void litos_file_set_unsaved(LitosFile *file)
{
file->saved = FALSE;
@@ -214,15 +229,13 @@ void litos_file_highlight_buffer(LitosFile *file) /* Apply different font styles
GtkSourceBuffer *source_buffer = GTK_SOURCE_BUFFER(file->buffer);
- if (file->name == NULL)
+ if ((lang = gtk_source_language_manager_guess_language(lm, file->name, NULL)) == NULL)
lang = gtk_source_language_manager_get_language(lm,"html");
- else
- lang = gtk_source_language_manager_guess_language(lm, file->name, NULL);
-
- gtk_source_buffer_set_language (source_buffer, lang);
if (lang != NULL)
+ { gtk_source_buffer_set_language (source_buffer, lang);
gtk_source_buffer_set_highlight_syntax (source_buffer, TRUE);
+ }
GtkSourceStyleSchemeManager *scheme_manager = gtk_source_style_scheme_manager_get_default();
const gchar * const* schemes = gtk_source_style_scheme_manager_get_scheme_ids(scheme_manager);
@@ -245,9 +258,8 @@ gboolean litos_file_load (LitosFile *file, GError **error)
if (g_file_load_contents (file->gfile, NULL, &contents, &length, NULL, error))
{
gtk_text_buffer_set_text (file->buffer, contents, length);
- litos_file_highlight_buffer(file);
- file->saved = TRUE;
g_object_notify_by_pspec (G_OBJECT (file), obj_properties[PROP_SAVED]);
+ file->saved = TRUE;
g_free (contents);
return TRUE;
}
@@ -256,6 +268,7 @@ gboolean litos_file_load (LitosFile *file, GError **error)
return FALSE;
}
+
gboolean litos_file_save(LitosFile *file, GError *error)
{
if (file->gfile != NULL)
diff --git a/main.c b/main.c
index a741be4..8169ec1 100644
--- a/main.c
+++ b/main.c
@@ -10,7 +10,7 @@ main (int argc, char *argv[])
* is *not* necessary in properly installed
* application.
*/
- g_setenv ("GSETTINGS_SCHEMA_DIR", ".", FALSE);
+ //g_setenv ("GSETTINGS_SCHEMA_DIR", ".", TRUE);
return g_application_run (G_APPLICATION (litos_app_new ()), argc, argv);
}
diff --git a/meson.build b/meson.build
index a7beee6..a90e50f 100644
--- a/meson.build
+++ b/meson.build
@@ -4,12 +4,26 @@ app_resources = gnome.compile_resources('litos_resources',
app_schemas = gnome.compile_schemas()
+project('org.gtk.litos',
+ version: '4.0.0',
+ meson_version: '>= 0.59.0',
+)
+
executable('litos',
'main.c',
- 'litos.c',
- 'litoswin.c',
- 'litosprefs.c',
+ 'litosappswin.c',
+ 'litosfilewin.c',
+ 'litosaccels.c',
+ 'sourceview.c',
+ 'litosappprefs.c',
app_resources,
app_schemas,
dependencies: libgtk_dep,
c_args: common_cflags)
+
+install_data('org.gtk.litos.gschema.xml',
+ install_dir: get_option('datadir') / 'glib-2.0/schemas',
+)
+
+gnome = import('gnome')
+gnome.post_install(glib_compile_schemas: true)
diff --git a/org.litos.gtk.desktop b/org.litos.gtk.desktop
new file mode 100644
index 0000000..326e540
--- /dev/null
+++ b/org.litos.gtk.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=litos
+Exec=litos %U
+Icon=litos
+DBusActivatable=true
+Terminal=false
+Type=Application
+Categories=Utility;TextEditor;GTK;
+MimeType=text/plain;
+StartupNotify=true