diff --git a/aporia.nim b/aporia.nim index bdc26ae..2d07f31 100644 --- a/aporia.nim +++ b/aporia.nim @@ -193,8 +193,6 @@ proc Exit() = # GTK Events # -- w(PWindow) -proc destroy(widget: PWidget, data: pgpointer) {.cdecl.} = - aporia.Exit() proc confirmUnsaved(win: var MainWin, t: Tab): int = var askSave = win.w.messageDialogNew(0, MessageWarning, BUTTONS_NONE, nil) @@ -386,7 +384,7 @@ proc cursorMoved(buffer: PTextBuffer, location: PTextIter, proc onCloseTab(btn: PButton, child: PWidget) proc tab_buttonRelease(widg: PWidget, ev: PEventButton, userDat: pwidget): bool -proc createTabLabel(name: string, t_child: PWidget): tuple[box: PWidget, +proc createTabLabel(name: string, t_child: PWidget, filename: string): tuple[box: PWidget, label: PLabel, closeBtn: PButton] = var eventBox = eventBoxNew() eventBox.setVisibleWindow(false) @@ -395,6 +393,10 @@ proc createTabLabel(name: string, t_child: PWidget): tuple[box: PWidget, var box = hboxNew(False, 0) var label = labelNew(name) + if filename.startsWith(getTempDir()): + # If this is a temporary tab, mark it as such. + label.setMarkup(name & " *") + var closebtn = buttonNew() closeBtn.setLabel(nil) var iconSize = iconSizeFromName("tabIconSize") @@ -411,6 +413,20 @@ proc createTabLabel(name: string, t_child: PWidget): tuple[box: PWidget, eventBox.add(box) return (eventBox, label, closeBtn) + +proc setTabTooltip(t: Tab) = + ## (Re)sets the tab tooltip text. + if t.filename != "": + var tooltip = "Path: " & t.filename & "\n" & + "Language: " & getLanguageName(win, t.buffer) + if t.filename.startsWith(getTempDir()): + tooltip.add("\nFile is saved in temporary files and may be deleted.") + t.label.setTooltipMarkup(tooltip) + else: + var tooltip = "Tab is not saved.\n" & + "Language: " & getLanguageName(win, t.buffer) + t.label.setTooltipMarkup(tooltip) + proc onModifiedChanged(buffer: PTextBuffer, theTab: gpointer) = ## This signal is called when the modification state of ``buffer`` is changed. # *Warning* we assume here that the currently selected tab was modified. @@ -430,16 +446,7 @@ proc onModifiedChanged(buffer: PTextBuffer, theTab: gpointer) = else: cTab.saved = true - var name = extractFilename(cTab.filename) - var tooltip = "Path: " & cTab.filename & "\n" & - "Language: " & getLanguageName(win, ctab.buffer) - - if cTab.isTemporary: - cTab.label.setMarkup(name & " *") - tooltip.add("\nFile is saved in temporary files and may be lost.") - else: - cTab.label.setText(name) - cTab.label.setTooltipMarkup(tooltip) + setTabTooltip(cTab) proc onChanged(buffer: PTextBuffer, sv: PSourceView) = ## This function is connected to the "changed" event on `buffer`. @@ -748,20 +755,7 @@ proc addTab(name, filename: string, setCurrent: bool = True, encoding = "utf-8") # Get the name.ext of the filename, for the tabs title nam = extractFilename(filename) - var (TabLabel, labelText, closeBtn) = createTabLabel(nam, scrollWindow) - - # Set the tooltip. - if filename != "": - var tooltip = "Path: " & filename & "\n" & - "Language: " & getLanguageName(win, buffer) - if filename.startsWith(getTempDir()): - labelText.setMarkup(nam & " *") - tooltip.add("\nFile is saved in temporary files and may be deleted.") - TabLabel.setTooltipMarkup(tooltip) - else: - var tooltip = "Tab is not saved.\n" & - "Language: " & getLanguageName(win, buffer) - TabLabel.setTooltipMarkup(tooltip) + var (TabLabel, labelText, closeBtn) = createTabLabel(nam, scrollWindow, filename) # Add a tab var nTab: Tab @@ -777,6 +771,9 @@ proc addTab(name, filename: string, setCurrent: bool = True, encoding = "utf-8") nTab.closeBtn.hide() win.Tabs.add(nTab) + # Set the tooltip + setTabTooltip(win.Tabs[win.tabs.len-1]) + # Add the tab to the GtkNotebook let res = win.SourceViewTabs.appendPage(scrollWindow, TabLabel) assert res != -1 @@ -1103,14 +1100,7 @@ proc pl_Toggled(menuitem: PCheckMenuItem, id: cstring) = win.setHighlightSyntax(currentTab, True) win.setLanguage(currentTab, langMan.getLanguage(id)) - # Set tooltip - var name = extractFilename(win.Tabs[currentTab].filename) - var tooltip = "Path: " & name & "\n" & - "Language: " & getLanguageName(win, win.Tabs[currentTab].buffer) - if win.Tabs[currentTab].isTemporary: - win.Tabs[currentTab].label.setMarkup(name & " *") - tooltip.add("\nFile is saved in temporary files and may be lost.") - win.Tabs[currentTab].label.setTooltipMarkup(tooltip) + setTabTooltip(win.tabs[currentTab]) plCheckUpdate(currentTab) @@ -2208,8 +2198,12 @@ proc initControls() = win.w.setDefaultSize(win.autoSettings.winWidth, win.autoSettings.winHeight) win.w.setTitle("Aporia") if win.autoSettings.winMaximized: win.w.maximize() - - discard win.w.signalConnect("destroy", SIGNAL_FUNC(aporia.destroy), nil) + + let winDestroy = + proc (widget: PWidget, data: pgpointer) {.cdecl.} = + aporia.Exit() + + discard win.w.signalConnect("destroy", SIGNAL_FUNC(winDestroy), nil) discard win.w.signalConnect("delete_event", SIGNAL_FUNC(aporia.delete_event), nil) discard win.w.signalConnect("window-state-event", diff --git a/todo.markdown b/todo.markdown index 5be33d5..de15db1 100644 --- a/todo.markdown +++ b/todo.markdown @@ -92,3 +92,4 @@ * Being able to go to column with go to line feature * Force focus the selected tab after initialisation. * When Raw Preferences are edited, need to reapply some settings to sourceview (color scheme, indentation width etc) among other settings. +* When wrap around is disabled, if term searched for is above the cursor a "Match not found" error is shown. More informative message should be shown instead. \ No newline at end of file