mcabber/src/screen.c
changeset 1225 0e9e9724d643
parent 1209 47579e8c73d0
child 1226 2521efbf3b72
equal deleted inserted replaced
1224:fb0460a3cf4b 1225:0e9e9724d643
  1882 // value: winbuf structure
  1882 // value: winbuf structure
  1883 // data: int, set to 1 if the buffer should be closed.
  1883 // data: int, set to 1 if the buffer should be closed.
  1884 // NOTE: does not work for special buffers.
  1884 // NOTE: does not work for special buffers.
  1885 static void buffer_purge(gpointer key, gpointer value, gpointer data)
  1885 static void buffer_purge(gpointer key, gpointer value, gpointer data)
  1886 {
  1886 {
  1887   int closebuf = (gint)data; // XXX GPOINTER_TO_INT?
  1887   int *p_closebuf = data;
  1888   winbuf *win_entry = value;
  1888   winbuf *win_entry = value;
  1889 
  1889 
  1890   // Delete the current hbuf
  1890   // Delete the current hbuf
  1891   hbuf_free(&win_entry->bd->hbuf);
  1891   hbuf_free(&win_entry->bd->hbuf);
  1892 
  1892 
  1893   if (closebuf) {
  1893   if (*p_closebuf) {
  1894     g_hash_table_remove(winbufhash, key);
  1894     g_hash_table_remove(winbufhash, key);
  1895   } else {
  1895   } else {
  1896     win_entry->bd->cleared = FALSE;
  1896     win_entry->bd->cleared = FALSE;
  1897     win_entry->bd->top = NULL;
  1897     win_entry->bd->top = NULL;
  1898   }
  1898   }
  1903 // If closebuf is 1, close the buffer.
  1903 // If closebuf is 1, close the buffer.
  1904 void scr_BufferPurge(int closebuf)
  1904 void scr_BufferPurge(int closebuf)
  1905 {
  1905 {
  1906   winbuf *win_entry;
  1906   winbuf *win_entry;
  1907   guint isspe;
  1907   guint isspe;
       
  1908   guint *p_closebuf;
  1908 
  1909 
  1909   // Get win_entry
  1910   // Get win_entry
  1910   if (!current_buddy) return;
  1911   if (!current_buddy) return;
  1911   isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
  1912   isspe = buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_SPECIAL;
  1912   win_entry = scr_SearchWindow(CURRENT_JID, isspe);
  1913   win_entry = scr_SearchWindow(CURRENT_JID, isspe);
  1913   if (!win_entry) return;
  1914   if (!win_entry) return;
  1914 
  1915 
  1915   if (!isspe) {
  1916   if (!isspe) {
  1916     buffer_purge((gpointer)CURRENT_JID, win_entry, (gpointer)closebuf);
  1917     p_closebuf = g_new(guint, 1);
  1917     // XXX GINT_TO_POINTER?
  1918     *p_closebuf = closebuf;
       
  1919     buffer_purge((gpointer)CURRENT_JID, win_entry, p_closebuf);
       
  1920     g_free(p_closebuf);
  1918     if (closebuf) {
  1921     if (closebuf) {
  1919       scr_set_chatmode(FALSE);
  1922       scr_set_chatmode(FALSE);
  1920       currentWindow = NULL;
  1923       currentWindow = NULL;
  1921     }
  1924     }
  1922   } else {
  1925   } else {
  1937   update_panels();
  1940   update_panels();
  1938 }
  1941 }
  1939 
  1942 
  1940 void scr_BufferPurgeAll(int closebuf)
  1943 void scr_BufferPurgeAll(int closebuf)
  1941 {
  1944 {
  1942   g_hash_table_foreach(winbufhash, buffer_purge, (gpointer)closebuf);
  1945   guint *p_closebuf;
  1943   // XXX GINT_TO_POINTER?
  1946   p_closebuf = g_new(guint, 1);
       
  1947 
       
  1948   *p_closebuf = closebuf;
       
  1949   g_hash_table_foreach(winbufhash, buffer_purge, p_closebuf);
       
  1950   g_free(p_closebuf);
  1944 
  1951 
  1945   if (closebuf) {
  1952   if (closebuf) {
  1946     scr_set_chatmode(FALSE);
  1953     scr_set_chatmode(FALSE);
  1947     currentWindow = NULL;
  1954     currentWindow = NULL;
  1948   }
  1955   }