diff options
author | cadmio <gioresta87@gmail.com> | 2023-10-21 10:17:19 +0200 |
---|---|---|
committer | cadmio <gioresta87@gmail.com> | 2023-10-21 10:17:19 +0200 |
commit | 6b30634535d61cddd7e4e2b8ffd4141ba4b6c950 (patch) | |
tree | c3933fd1f8774741cb8ecb114562a6800f072c65 | |
parent | d35b2cfd6acaae3abd5e4054eaad59981d262ae8 (diff) | |
download | litos4-6b30634535d61cddd7e4e2b8ffd4141ba4b6c950.tar.gz litos4-6b30634535d61cddd7e4e2b8ffd4141ba4b6c950.tar.bz2 litos4-6b30634535d61cddd7e4e2b8ffd4141ba4b6c950.zip |
update all
-rw-r--r-- | Makefile | 22 | ||||
-rw-r--r-- | litos.png | bin | 0 -> 2168 bytes | |||
-rw-r--r-- | litosaccels.c | 42 | ||||
-rw-r--r-- | litosapp.c | 15 | ||||
-rw-r--r-- | litosappwin.c | 130 | ||||
-rw-r--r-- | litosfile.c | 27 | ||||
-rw-r--r-- | main.c | 2 | ||||
-rw-r--r-- | meson.build | 20 | ||||
-rw-r--r-- | org.litos.gtk.desktop | 10 |
9 files changed, 169 insertions, 99 deletions
@@ -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 Binary files differnew file mode 100644 index 0000000..9b57b78 --- /dev/null +++ b/litos.png 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 */ @@ -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) @@ -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 |