mcabber/src/screen.c
changeset 1093 6ca9a65df21f
parent 1089 a61c3311a5bb
child 1115 922a9ae1a17e
equal deleted inserted replaced
1092:1ef7572c3096 1093:6ca9a65df21f
    72 static WINDOW *mainstatusWnd, *chatstatusWnd;
    72 static WINDOW *mainstatusWnd, *chatstatusWnd;
    73 static PANEL *rosterPanel, *chatPanel, *inputPanel;
    73 static PANEL *rosterPanel, *chatPanel, *inputPanel;
    74 static PANEL *mainstatusPanel, *chatstatusPanel;
    74 static PANEL *mainstatusPanel, *chatstatusPanel;
    75 static PANEL *logPanel;
    75 static PANEL *logPanel;
    76 static int maxY, maxX;
    76 static int maxY, maxX;
       
    77 static int prev_chatwidth;
    77 static winbuf *statusWindow;
    78 static winbuf *statusWindow;
    78 static winbuf *currentWindow;
    79 static winbuf *currentWindow;
    79 static GList  *statushbuf;
    80 static GList  *statushbuf;
    80 
    81 
    81 static int roster_hidden;
    82 static int roster_hidden;
   429     x = Roster_Width;
   430     x = Roster_Width;
   430   if (log_win_on_top)
   431   if (log_win_on_top)
   431     y = Log_Win_Height-1;
   432     y = Log_Win_Height-1;
   432   else
   433   else
   433     y = 0;
   434     y = 0;
       
   435 
   434   lines = CHAT_WIN_HEIGHT;
   436   lines = CHAT_WIN_HEIGHT;
   435   cols = maxX - Roster_Width;
   437   cols = maxX - Roster_Width;
   436   if (cols < 1) cols = 1;
   438   if (cols < 1)
       
   439     cols = 1;
   437 
   440 
   438   tmp->win = newwin(lines, cols, y, x);
   441   tmp->win = newwin(lines, cols, y, x);
   439   while (!tmp->win) {
   442   while (!tmp->win) {
   440     safe_usleep(250);
   443     safe_usleep(250);
   441     tmp->win = newwin(lines, cols, y, x);
   444     tmp->win = newwin(lines, cols, y, x);
   903     inputPanel  = new_panel(inputWnd);
   906     inputPanel  = new_panel(inputWnd);
   904 
   907 
   905     // Build the buddylist at least once, to make sure the special buffer
   908     // Build the buddylist at least once, to make sure the special buffer
   906     // is added
   909     // is added
   907     buddylist_build();
   910     buddylist_build();
       
   911 
       
   912     // Init prev_chatwidth; this variable will be used to prevent us
       
   913     // from rewrapping buffers when the width doesn't change.
       
   914     prev_chatwidth = maxX - Roster_Width - PREFIX_WIDTH;
   908     // Wrap existing status buffer lines
   915     // Wrap existing status buffer lines
   909     hbuf_rebuild(&statushbuf, maxX - Roster_Width - PREFIX_WIDTH);
   916     hbuf_rebuild(&statushbuf, prev_chatwidth);
   910 
   917 
   911 #ifndef UNICODE
   918 #ifndef UNICODE
   912     if (utf8_mode)
   919     if (utf8_mode)
   913       scr_LogPrint(LPRINT_NORMAL,
   920       scr_LogPrint(LPRINT_NORMAL,
   914                    "WARNING: Compiled without full UTF-8 support!");
   921                    "WARNING: Compiled without full UTF-8 support!");
   931 static void resize_win_buffer(gpointer key, gpointer value, gpointer data)
   938 static void resize_win_buffer(gpointer key, gpointer value, gpointer data)
   932 {
   939 {
   933   winbuf *wbp = value;
   940   winbuf *wbp = value;
   934   struct dimensions *dim = data;
   941   struct dimensions *dim = data;
   935   int chat_x_pos, chat_y_pos;
   942   int chat_x_pos, chat_y_pos;
       
   943   int new_chatwidth;
   936 
   944 
   937   if (!(wbp && wbp->win))
   945   if (!(wbp && wbp->win))
   938     return;
   946     return;
   939 
   947 
   940   if (log_win_on_top)
   948   if (log_win_on_top)
   954   // If a panel exists, replace the old window with the new
   962   // If a panel exists, replace the old window with the new
   955   if (wbp->panel)
   963   if (wbp->panel)
   956     replace_panel(wbp->panel, wbp->win);
   964     replace_panel(wbp->panel, wbp->win);
   957   // Redo line wrapping
   965   // Redo line wrapping
   958   wbp->top = hbuf_previous_persistent(wbp->top);
   966   wbp->top = hbuf_previous_persistent(wbp->top);
   959   hbuf_rebuild(&wbp->hbuf, maxX - Roster_Width - PREFIX_WIDTH);
   967 
       
   968   new_chatwidth = maxX - Roster_Width - PREFIX_WIDTH;
       
   969   if (new_chatwidth != prev_chatwidth)
       
   970     hbuf_rebuild(&wbp->hbuf, new_chatwidth);
   960 }
   971 }
   961 
   972 
   962 //  scr_Resize()
   973 //  scr_Resize()
   963 // Function called when the window is resized.
   974 // Function called when the window is resized.
   964 // - Resize windows
   975 // - Resize windows
   987   g_hash_table_foreach(winbufhash, resize_win_buffer, &dim);
   998   g_hash_table_foreach(winbufhash, resize_win_buffer, &dim);
   988 
   999 
   989   // Resize/move special status buffer
  1000   // Resize/move special status buffer
   990   if (statusWindow)
  1001   if (statusWindow)
   991     resize_win_buffer(NULL, statusWindow, &dim);
  1002     resize_win_buffer(NULL, statusWindow, &dim);
       
  1003 
       
  1004   // Update prev_chatwidth, now that all buffers have been resized
       
  1005   prev_chatwidth = maxX - Roster_Width - PREFIX_WIDTH;
   992 
  1006 
   993   // Refresh current buddy window
  1007   // Refresh current buddy window
   994   if (chatmode)
  1008   if (chatmode)
   995     scr_ShowBuddyWindow();
  1009     scr_ShowBuddyWindow();
   996 }
  1010 }