Browse Source

Finally fixed the scrolling issue in terminal.

merge-requests/365/head
eidheim 10 years ago
parent
commit
c73a86f728
  1. 19
      src/terminal.cc
  2. 1
      src/terminal.h

19
src/terminal.cc

@ -117,14 +117,6 @@ Terminal::Terminal() {
}); });
async_print_dispatcher.connect([this](){ async_print_dispatcher.connect([this](){
async_print_on_line_strings_mutex.lock();
if(async_print_on_line_strings.size()>0) {
for(auto &string: async_print_on_line_strings)
print(string.first, string.second);
async_print_on_line_strings.clear();
}
async_print_on_line_strings_mutex.unlock();
async_print_strings_mutex.lock(); async_print_strings_mutex.lock();
if(async_print_strings.size()>0) { if(async_print_strings.size()>0) {
for(auto &string_bold: async_print_strings) for(auto &string_bold: async_print_strings)
@ -133,6 +125,15 @@ Terminal::Terminal() {
} }
async_print_strings_mutex.unlock(); async_print_strings_mutex.unlock();
}); });
async_print_on_line_dispatcher.connect([this](){
async_print_on_line_strings_mutex.lock();
if(async_print_on_line_strings.size()>0) {
for(auto &line_string: async_print_on_line_strings)
print(line_string.first, line_string.second);
async_print_on_line_strings.clear();
}
async_print_on_line_strings_mutex.unlock();
});
} }
int Terminal::execute(const std::string &command, const boost::filesystem::path &path) { int Terminal::execute(const std::string &command, const boost::filesystem::path &path) {
@ -327,7 +328,7 @@ void Terminal::async_print(int line_nr, const std::string &message) {
async_print_on_line_strings.emplace_back(line_nr, message); async_print_on_line_strings.emplace_back(line_nr, message);
async_print_on_line_strings_mutex.unlock(); async_print_on_line_strings_mutex.unlock();
if(dispatch) if(dispatch)
async_print_dispatcher(); async_print_on_line_dispatcher();
} }
bool Terminal::on_key_press_event(GdkEventKey *event) { bool Terminal::on_key_press_event(GdkEventKey *event) {

1
src/terminal.h

@ -45,6 +45,7 @@ protected:
bool on_key_press_event(GdkEventKey *event); bool on_key_press_event(GdkEventKey *event);
private: private:
Glib::Dispatcher async_print_dispatcher; Glib::Dispatcher async_print_dispatcher;
Glib::Dispatcher async_print_on_line_dispatcher;
std::vector<std::pair<std::string, bool> > async_print_strings; std::vector<std::pair<std::string, bool> > async_print_strings;
std::vector<std::pair<int, std::string> > async_print_on_line_strings; std::vector<std::pair<int, std::string> > async_print_on_line_strings;
std::mutex async_print_strings_mutex; std::mutex async_print_strings_mutex;

Loading…
Cancel
Save