]> git.lyx.org Git - lyx.git/blobdiff - src/lyx_cb.C
Three patches from Dekel. Read ChangeLog
[lyx.git] / src / lyx_cb.C
index f51570f0fd8dd3e8d21ce1322e718c6159fc69e3..f93db63ab5b4820201290c8b340f2205e44cfc99 100644 (file)
@@ -57,6 +57,7 @@ using std::istream_iterator;
 using std::pair;
 using std::vector;
 using std::sort;
+using std::equal;
 
 extern Combox * combo_language;
 extern Combox * combo_language2;
@@ -77,6 +78,8 @@ extern FD_form_ref * fd_form_ref;
 extern FD_LaTeXOptions * fd_latex_options;
 extern FD_form_bullet * fd_form_bullet;
 
+#define XFORMS_CLIPBOARD 1
+
 extern BufferView * current_view; // called too many times in this file...
 
 extern void DeleteSimpleCutBuffer(); /* for the cleanup when exiting */
@@ -406,10 +409,10 @@ int MakeLaTeXOutput(Buffer * buffer)
        if (lyxrc.use_tempdir || (IsDirWriteable(path) < 1)) {
                path = buffer->tmppath;
        }
-       if (!buffer->isDviClean()) {
+       //if (!buffer->isDviClean()) {
                Path p(path);
                ret = MenuRunLaTeX(buffer);
-       }
+               //}
        return ret;
 }
 
@@ -1222,11 +1225,11 @@ void MenuInsertRef()
 }
 
 
+#ifndef XFORMS_CLIPBOARD
 void MenuPasteSelection(char at)
 {
        if (!current_view->available())
                return;
-
        ascii_type = at;
   
        Atom data_prop = XInternAtom(fl_display, 
@@ -1238,8 +1241,9 @@ void MenuPasteSelection(char at)
                          XA_PRIMARY, XA_STRING, data_prop, 
                          current_view->owner()->getForm()->window, 0);
        XFlush(fl_display);
-}
 
+}
+#endif
 
 
 
@@ -2373,10 +2377,12 @@ extern "C" void DocumentApplyCB(FL_OBJECT *, long)
        if (current_view->available()) {
                if (old_language != new_language &&
                    old_language->RightToLeft == new_language->RightToLeft && 
-                   ! current_view->buffer()->isMultiLingual() ) {
+                   ! current_view->buffer()->isMultiLingual() )
                        current_view->buffer()->ChangeLanguage(old_language,
                                                               new_language);
-                       current_view->buffer()->redraw();
+               if (old_language != new_language) {
+                       //current_view->buffer()->redraw();
+                       redo = true;
                }
        }
        params->language_info = new_language;
@@ -3131,7 +3137,8 @@ extern "C" void TocCancelCB(FL_OBJECT *, long)
 }
 
 
-extern "C" void TocUpdateCB(FL_OBJECT *, long)
+extern "C"
+void TocUpdateCB(FL_OBJECT *, long)
 {
        if (!current_view->available()) {
                toclist.clear();
@@ -3143,9 +3150,20 @@ extern "C" void TocUpdateCB(FL_OBJECT *, long)
 
        vector<vector<Buffer::TocItem> > tmp =
                current_view->buffer()->getTocList();
-       if (toclist == tmp[0])
-               return;
-       toclist = tmp[0];
+       int type = fl_get_choice(fd_form_toc->toctype)-1;
+       //if (toclist == tmp[type])
+       //      return;
+       if (toclist.size() == tmp[type].size()) {
+               // Check if all elements are the same.
+               unsigned int i = 0;
+               for (; i < toclist.size(); ++i) {
+                       if (toclist[i] !=  tmp[type][i])
+                               break;
+               }
+               if (i >= toclist.size()) return;
+       }
+
+       toclist = tmp[type];
 
        static Buffer * buffer = 0;
        int topline = 0;
@@ -3185,10 +3203,21 @@ extern "C" void RefSelectCB(FL_OBJECT *, long data)
        if (s.empty())
                return;
 
-        if (data >= 5) {
+        if (data == 5) {
                 current_view->owner()->getLyXFunc()->Dispatch(LFUN_REFGOTO, s.c_str());
+               if (!current_view->NoSavedPositions()) {
+                       fl_activate_object(fd_form_ref->back);
+                       fl_set_object_lcol(fd_form_ref->back, FL_BLACK);
+               }
                return;
-       }
+       } else if (data >= 6) {
+               current_view->owner()->getLyXFunc()->Dispatch(LFUN_REFBACK);
+               if (current_view->NoSavedPositions()) {
+                       fl_deactivate_object(fd_form_ref->back);
+                       fl_set_object_lcol(fd_form_ref->back, FL_INACTIVE);
+               }
+               return;
+       }       
 
        static string const commands[5]
                = { "\\ref", "\\pageref", "\\vref", "\\vpageref",
@@ -3240,40 +3269,67 @@ extern "C" void RefUpdateCB(FL_OBJECT *, long)
        }
        fl_set_browser_topline(brow, topline);
 
-       if (!fl_get_browser_maxline(brow)) {
+       bool empty = refs.empty();
+       bool sgml = current_view->buffer()->isSGML();
+       bool readonly = current_view->buffer()->isReadonly();
+
+       if (current_view->NoSavedPositions()) {
+               fl_deactivate_object(fd_form_ref->back);
+               fl_set_object_lcol(fd_form_ref->back, FL_INACTIVE);
+       } else {
+               fl_activate_object(fd_form_ref->back);
+               fl_set_object_lcol(fd_form_ref->back, FL_BLACK);
+       }
+
+       if (empty) {
                fl_add_browser_line(brow, 
                                    _("*** No labels found in document ***"));
                fl_deactivate_object(brow);
+               fl_deactivate_object(fd_form_ref->gotoref);
+               fl_set_object_lcol(fd_form_ref->gotoref, FL_INACTIVE);
        } else {
                fl_select_browser_line(brow, topline);
                fl_activate_object(brow);
+               fl_activate_object(fd_form_ref->gotoref);
+               fl_set_object_lcol(fd_form_ref->gotoref, FL_BLACK);
        }
-       if (current_view->buffer()->isReadonly()) {
-               // would be better to de/activate insert buttons
-               // but that's more work... besides this works. ARRae
-               fl_hide_form(fd_form_ref->form_ref);
-       }
-       if (!current_view->buffer()->isSGML()) {
-               fl_deactivate_object(fd_form_ref->ref_name);
-               fl_set_object_lcol(fd_form_ref->ref_name, FL_INACTIVE);
 
+       if (empty || readonly) {
+               fl_deactivate_object(fd_form_ref->ref);
+               fl_set_object_lcol(fd_form_ref->ref, FL_INACTIVE);
+               fl_deactivate_object(fd_form_ref->pageref);
+               fl_set_object_lcol(fd_form_ref->pageref, FL_INACTIVE);
+       } else {
+               fl_activate_object(fd_form_ref->ref);
+               fl_set_object_lcol(fd_form_ref->ref, FL_BLACK);
+               fl_activate_object(fd_form_ref->pageref);
+               fl_set_object_lcol(fd_form_ref->pageref, FL_BLACK);
+       }
+       
+       if (empty || readonly || sgml) {
+               fl_deactivate_object(fd_form_ref->vref);
+               fl_set_object_lcol(fd_form_ref->vref, FL_INACTIVE);
+               fl_deactivate_object(fd_form_ref->vpageref);
+               fl_set_object_lcol(fd_form_ref->vpageref, FL_INACTIVE);
+               fl_deactivate_object(fd_form_ref->prettyref);
+               fl_set_object_lcol(fd_form_ref->prettyref, FL_INACTIVE);
+       } else {
                fl_activate_object(fd_form_ref->vref);
                fl_set_object_lcol(fd_form_ref->vref, FL_BLACK);
                fl_activate_object(fd_form_ref->vpageref);
                fl_set_object_lcol(fd_form_ref->vpageref, FL_BLACK);
                fl_activate_object(fd_form_ref->prettyref);
                fl_set_object_lcol(fd_form_ref->prettyref, FL_BLACK);
-       } else {
+       }
+
+       if (sgml) {
                fl_activate_object(fd_form_ref->ref_name);
                fl_set_object_lcol(fd_form_ref->ref_name, FL_BLACK);
-
-               fl_deactivate_object(fd_form_ref->vref);
-               fl_set_object_lcol(fd_form_ref->vref, FL_INACTIVE);
-               fl_deactivate_object(fd_form_ref->vpageref);
-               fl_set_object_lcol(fd_form_ref->vpageref, FL_INACTIVE);
-               fl_deactivate_object(fd_form_ref->prettyref);
-               fl_set_object_lcol(fd_form_ref->prettyref, FL_INACTIVE);
+       } else {
+               fl_deactivate_object(fd_form_ref->ref_name);
+               fl_set_object_lcol(fd_form_ref->ref_name, FL_INACTIVE);
        }
+
        fl_show_object(brow);
 }