Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • global.c

    r7b4f3be rdc1edbd  
    1616
    1717  g_type_init();
     18  g_thread_init(NULL);
     19
     20  owl_select_init();
    1821
    1922  g->lines=LINES;
     
    5154  g->direction=OWL_DIRECTION_DOWNWARDS;
    5255  g->zaway=0;
     56  if (has_colors()) {
     57    g->hascolors=1;
     58  }
     59  g->colorpairs=COLOR_PAIRS;
    5360  owl_fmtext_init_colorpair_mgr(&(g->cpmgr));
    5461  g->debug=OWL_DEBUG;
     
    95102
    96103  owl_errqueue_init(&(g->errqueue));
    97   g->got_err_signal=0;
    98104
    99105  owl_zbuddylist_create(&(g->zbuddies));
     
    104110  owl_message_init_fmtext_cache();
    105111  owl_list_create(&(g->io_dispatch_list));
    106   owl_list_create(&(g->psa_list));
    107112  g->timerlist = NULL;
    108   g->interrupted = FALSE;
    109113  g->kill_buffer = NULL;
     114
     115  g->interrupt_count = 0;
     116  g->interrupt_lock = g_mutex_new();
    110117}
    111118
     
    344351
    345352void owl_global_set_resize_pending(owl_global *g) {
    346   g->resizepending=1;
     353  g->resizepending = true;
    347354}
    348355
     
    444451  /* resize the screen.  If lines or cols is 0 use the terminal size */
    445452  if (!g->resizepending) return;
    446   g->resizepending = 0;
     453  g->resizepending = false;
    447454
    448455  owl_global_get_terminal_size(&g->lines, &g->cols);
     
    570577owl_view *owl_global_get_current_view(owl_global *g) {
    571578  return(&(g->current_view));
     579}
     580
     581/* has colors */
     582
     583int owl_global_get_hascolors(const owl_global *g) {
     584  if (g->hascolors) return(1);
     585  return(0);
     586}
     587
     588/* color pairs */
     589
     590int owl_global_get_colorpairs(const owl_global *g) {
     591  return(g->colorpairs);
    572592}
    573593
     
    676696}
    677697
    678 int owl_global_is_doaimevents(const owl_global *g)
    679 {
    680   if (g->aim_doprocessing) return(1);
    681   return(0);
     698bool owl_global_is_doaimevents(const owl_global *g)
     699{
     700  return g->aim_event_source != NULL;
    682701}
    683702
    684703void owl_global_set_doaimevents(owl_global *g)
    685704{
    686   g->aim_doprocessing=1;
     705  if (g->aim_event_source)
     706    return;
     707  g->aim_event_source = owl_aim_event_source_new(owl_global_get_aimsess(g));
     708  g_source_attach(g->aim_event_source, NULL);
    687709}
    688710
    689711void owl_global_set_no_doaimevents(owl_global *g)
    690712{
    691   g->aim_doprocessing=0;
     713  if (!g->aim_event_source)
     714    return;
     715  g_source_destroy(g->aim_event_source);
     716  g_source_unref(g->aim_event_source);
     717  g->aim_event_source = NULL;
    692718}
    693719
     
    807833}
    808834
    809 void owl_global_set_errsignal(owl_global *g, int signum, siginfo_t *siginfo)
    810 {
    811   g->got_err_signal = signum;
    812   if (siginfo) {
    813     g->err_signal_info = *siginfo;
    814   } else {
    815     siginfo_t si;
    816     memset(&si, 0, sizeof(si));
    817     g->err_signal_info = si;
    818   }
    819 }
    820 
    821 int owl_global_get_errsignal_and_clear(owl_global *g, siginfo_t *siginfo)
    822 {
    823   int signum;
    824   if (siginfo && g->got_err_signal) {
    825     *siginfo = g->err_signal_info;
    826   }
    827   signum = g->got_err_signal;
    828   g->got_err_signal = 0;
    829   return signum;
    830 }
    831 
    832 
    833835owl_zbuddylist *owl_global_get_zephyr_buddylist(owl_global *g)
    834836{
     
    861863}
    862864
    863 owl_list *owl_global_get_psa_list(owl_global *g)
    864 {
    865   return &(g->psa_list);
    866 }
    867 
    868865GList **owl_global_get_timerlist(owl_global *g)
    869866{
    870867  return &(g->timerlist);
    871 }
    872 
    873 int owl_global_is_interrupted(const owl_global *g) {
    874   return g->interrupted;
    875 }
    876 
    877 void owl_global_set_interrupted(owl_global *g) {
    878   g->interrupted = 1;
    879 }
    880 
    881 void owl_global_unset_interrupted(owl_global *g) {
    882   g->interrupted = 0;
    883868}
    884869
     
    948933  g->kill_buffer = g_strndup(kill, len);
    949934}
     935
     936void owl_global_add_interrupt(owl_global *g) {
     937  /* TODO: This can almost certainly be done with atomic
     938   * operations. Whatever. */
     939  g_mutex_lock(g->interrupt_lock);
     940  g->interrupt_count++;
     941  g_mutex_unlock(g->interrupt_lock);
     942}
     943
     944bool owl_global_take_interrupt(owl_global *g) {
     945  bool ans = false;
     946  g_mutex_lock(g->interrupt_lock);
     947  if (g->interrupt_count > 0) {
     948    ans = true;
     949    g->interrupt_count--;
     950  }
     951  g_mutex_unlock(g->interrupt_lock);
     952  return ans;
     953}
Note: See TracChangeset for help on using the changeset viewer.