crash attempting to create tab menu

From: Kevin Duffus <KevinDuffus_at_mail.rit.edu>
Date: Wed Sep 29 2004 - 04:13:14 CEST
Hey. I've gotten the tab menu in place according to uwog specifications (http://www.rit.edu/~kod1929/AbiWord/tabMenu.png). There is just one problem with the callback for activated menu items. Abiword crashes and spits out "Aborted" on the terminal whenever i try to modify m_iDefaultTabType :( in ap_UnixTopRuler.*

i have the menu code set up and then a number corresponding to the clicked menu item is sent to "setTabStop (int)" in ap_TopRuler.*
i'm attempting to set m_iDefaultTabType like so: m_iDefaultTabType = static_cast<eTabType>(TabType), where TabType is the int passed to the function.

AbiWord crashes even if i just call a function within ap_TopRuler itself, such as _displayStatusMessage ()

Does anyone have any idea why this occurs?

--- /root/Media/abiword-2.1.6/abi/src/wp/ap/xp/ap_TopRuler.cpp 2004-08-18 19:17:53.000000000 -0400
+++ ./ap_TopRuler.cpp 2004-09-28 21:49:01.770533088 -0400
@@ -2035,6 +2035,18 @@
         return 0;
 }
 
+void AP_TopRuler::setTabStop(int m_iTabType)
+{
+ //m_iDefaultTabType = static_cast<eTabType>(m_iTabType);
+}
+
+// produce old behaviour if showTabMenu is not implemented on platform
+void AP_TopRuler::showTabMenu(void)
+{
+ currentTabType = --currentTabType <= FL_TAB_NONE ? __FL_TAB_MAX-1 : currentTabType;
+ m_iDefaultTabType = static_cast<eTabType>(currentTabType);
+}
+
 void AP_TopRuler::mousePress(EV_EditModifierState /* ems */,
                                                          EV_EditMouseButton emb , UT_uint32 x, UT_uint32 y)
 {
@@ -2093,16 +2105,16 @@
           if ( pView->getViewMode () == VIEW_WEB )
             return ;
 
- int currentTabType = m_iDefaultTabType;
+ currentTabType = m_iDefaultTabType;
                 if(emb == EV_EMB_BUTTON1)
                 {
                         currentTabType = ++currentTabType >= __FL_TAB_MAX ? FL_TAB_NONE+1 : currentTabType;
+ m_iDefaultTabType = static_cast<eTabType>(currentTabType);
                 }
- else
+ else if (emb == EV_EMB_BUTTON3)
                 {
- currentTabType = --currentTabType <= FL_TAB_NONE ? __FL_TAB_MAX-1 : currentTabType;
+ showTabMenu ();
                 }
- m_iDefaultTabType = static_cast<eTabType>(currentTabType);
                 _drawTabToggle(NULL, true);
                 XAP_String_Id baseTabName = AP_STRING_ID_TabToggleLeftTab-1;
                 _displayStatusMessage(baseTabName + m_iDefaultTabType);
--- /root/Media/abiword-2.1.6/abi/src/wp/ap/xp/ap_TopRuler.h 2004-03-22 19:13:28.000000000 -0500
+++ ./ap_TopRuler.h 2004-09-28 21:51:04.421887248 -0400
@@ -204,6 +204,8 @@
 
         UT_sint32 setTableLineDrag(PT_DocPosition pos, UT_sint32 x, UT_sint32 & iFixed);
         void mouseMotion(EV_EditModifierState ems, UT_sint32 x, UT_sint32 y);
+ void setTabStop (int);
+ virtual void showTabMenu (void);
         void mousePress(EV_EditModifierState ems, EV_EditMouseButton emb, UT_uint32 x, UT_uint32 y);
         void mouseRelease(EV_EditModifierState ems, EV_EditMouseButton emb, UT_sint32 x, UT_sint32 y);
 
@@ -355,6 +357,7 @@
         bool m_bBeforeFirstMotion;
         UT_sint32 m_oldX; /* Only for dragging; used to see if object has moved */
 
+ int currentTabType;
         eTabType m_iDefaultTabType;
         UT_sint32 m_draggingCell; // index of cell being dragged
         bool m_bGuide; /* true ==> guide line XORed onscreen */
--- /root/Media/abiword-2.1.6/abi/src/wp/ap/unix/ap_UnixTopRuler.h 2002-07-27 20:49:40.000000000 -0400
+++ ../unix/ap_UnixTopRuler.h 2004-09-28 21:58:48.751298448 -0400
@@ -37,11 +37,12 @@
 
 class AP_UnixTopRuler : public AP_TopRuler
 {
-public:
+public :
         AP_UnixTopRuler(XAP_Frame * pFrame);
         virtual ~AP_UnixTopRuler(void);
 
         GtkWidget * createWidget(void);
+ virtual void showTabMenu (void);
         virtual void setView(AV_View * pView);
 
         // cheats for the callbacks
@@ -58,6 +59,7 @@
         class _fe
         {
         public:
+ static void TabStop(GtkWidget * w, gpointer TabType);
                 static gint button_press_event(GtkWidget * w, GdkEventButton * e);
                 static gint button_release_event(GtkWidget * w, GdkEventButton * e);
                 static gint configure_event(GtkWidget* w, GdkEventConfigure *e);
--- /root/Media/abiword-2.1.6/abi/src/wp/ap/unix/ap_UnixTopRuler.cpp 2004-03-01 06:45:35.000000000 -0500
+++ ../unix/ap_UnixTopRuler.cpp 2004-09-28 21:54:15.729804024 -0400
@@ -24,6 +24,7 @@
 #include "ut_debugmsg.h"
 #include "xap_UnixDialogHelper.h"
 
+#include "ap_Strings.h"
 #include "xap_Frame.h"
 #include "xap_UnixFrameImpl.h"
 
@@ -153,7 +154,50 @@
         return m_rootWindow;
 }
 
-
+/*****************************************************************/
+
+void AP_UnixTopRuler::_fe::TabStop(GtkWidget * w, gpointer TabType)
+{
+ AP_UnixTopRuler * pUnixTopRuler = static_cast<AP_UnixTopRuler *>(g_object_get_data (G_OBJECT (w), "user_data"));
+ pUnixTopRuler->setTabStop (GPOINTER_TO_INT (TabType));
+}
+
+void AP_UnixTopRuler::showTabMenu (void)
+{
+ GtkWidget *menu = gtk_menu_new ();
+ GtkWidget *menu_item;
+ int TabType = 0;
+
+ UT_String pzMessageFormat;
+ m_pFrame->getApp()->getStringSet()->getValue(AP_STRING_ID_TabToggleLeftTab, XAP_App::getApp()->getDefaultEncoding(),pzMessageFormat);
+ menu_item = gtk_menu_item_new_with_label (pzMessageFormat.c_str ());
+ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (_fe::TabStop), GINT_TO_POINTER (TabType++));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+
+ m_pFrame->getApp()->getStringSet()->getValue(AP_STRING_ID_TabToggleCenterTab, XAP_App::getApp()->getDefaultEncoding(),pzMessageFormat);
+ menu_item = gtk_menu_item_new_with_label (pzMessageFormat.c_str ());
+ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (_fe::TabStop), GINT_TO_POINTER (TabType++));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+
+ m_pFrame->getApp()->getStringSet()->getValue(AP_STRING_ID_TabToggleRightTab, XAP_App::getApp()->getDefaultEncoding(),pzMessageFormat);
+ menu_item = gtk_menu_item_new_with_label (pzMessageFormat.c_str ());
+ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (_fe::TabStop), GINT_TO_POINTER (TabType++));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+
+ m_pFrame->getApp()->getStringSet()->getValue(AP_STRING_ID_TabToggleDecimalTab, XAP_App::getApp()->getDefaultEncoding(),pzMessageFormat);
+ menu_item = gtk_menu_item_new_with_label (pzMessageFormat.c_str ());
+ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (_fe::TabStop), GINT_TO_POINTER (TabType++));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+
+ m_pFrame->getApp()->getStringSet()->getValue(AP_STRING_ID_TabToggleBarTab, XAP_App::getApp()->getDefaultEncoding(),pzMessageFormat);
+ menu_item = gtk_menu_item_new_with_label (pzMessageFormat.c_str ());
+ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (_fe::TabStop), GINT_TO_POINTER (TabType));
+ gtk_menu_append (GTK_MENU (menu), menu_item);
+
+ gtk_widget_show_all (menu);
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time ());
+}
+
 /*****************************************************************/
 
 gint AP_UnixTopRuler::_fe::button_press_event(GtkWidget * w, GdkEventButton * e)
Received on Wed Sep 29 04:14:31 2004

This archive was generated by hypermail 2.1.8 : Wed Sep 29 2004 - 04:14:31 CEST