×
Namespaces

Variants
Actions
(Difference between revisions)

Archived:FEP causing browser to crash on S60 2nd and 3rd Editions (Known Issue)

From Nokia Developer Wiki
Jump to: navigation, search
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot change of template (Template:KnowledgeBase) - now using Template:ArticleMetaData)
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot update - Fix metadata etc)
Line 1: Line 1:
{{KBKI}}
+
{{ArticleMetaData <!-- v1.2 -->
__NOTOC__
+
__NOEDITSECTION__
+
{{ArticleMetaData
+
|id=KIS000411
+
|platform=S60 2nd Edition, FP2 and FP3<br>S60 3rd Edition
+
|devices=
+
|category=
+
|subcategory=
+
|creationdate=September 21, 2006
+
|keywords=
+
 
+
 
|sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) -->
 
|sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) -->
 
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
 
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
|sdk=<!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) -->
+
|devices= <!-- Devices tested against - e.g. ''devices=Nokia 6131 NFC, Nokia C7-00'') -->
|devicecompatability=<!-- Compatible devices (e.g.: All* (must have GPS) ) -->
+
|sdk= <!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) -->
|signing=<!-- Empty or one of Self-Signed, DevCert, Manufacturer -->
+
|platform= S60 2nd Edition, FP2 and FP3<br>S60 3rd Edition
|capabilities=<!-- Capabilities required (e.g. Location, NetworkServices.) -->
+
|devicecompatability= <!-- Compatible devices (e.g.: All* (must have GPS) ) -->
|author=[[User:Technical writer 1]]
+
|dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 -->
 +
|signing= <!-- Empty or one of Self-Signed, DevCert, Manufacturer -->
 +
|capabilities= <!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. -->
 +
|keywords= <!-- APIs, classes and methods (e.g. QSystemScreenSaver, QList, CBase -->
 +
|language= <!-- Language category code for non-English topics - e.g. Lang-Chinese -->
 +
|translated-by= <!-- [[User:XXXX]] -->
 +
|translated-from-title= <!-- Title only -->
 +
|translated-from-id= <!-- Id of translated revision -->
 +
|review-by= <!-- After re-review: [[User:username]] -->
 +
|review-timestamp= <!-- After re-review: YYYYMMDD -->
 +
|update-by= <!-- After significant update: [[User:username]]-->
 +
|update-timestamp= <!-- After significant update: YYYYMMDD -->
 +
|creationdate= 20060921
 +
|author= [[User:Technical writer 1]]
 +
<!-- The following are not in current metadata -->
 +
|subcategory=
 +
|id= KIS000411
 
}}
 
}}
  
Line 29: Line 34:
 
The dummy indicator implementation would be something like this:<br>//------------------------------------------------------------------------------<br>// FepIndicator.h:<br><nowiki>#</nowiki>include <nowiki><</nowiki>akneditstateindicator.h<nowiki>></nowiki> &nbsp;// for MAknEditingStateIndicator<br>class CFepIndicator : public CBase, public MAknEditingStateIndicator<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enum TIndicatorState<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EStateNone = 1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EStateNumeric,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EStateAlphabat<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki>;<br>public:<br>&nbsp;&nbsp;&nbsp;&nbsp;static CFepIndicator* NewL();<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>~</nowiki>CFepIndicator();<br>&nbsp;&nbsp;&nbsp;&nbsp;virtual void SetState(TIndicatorState aState);<br>&nbsp;&nbsp;&nbsp;&nbsp;// From MAknEditingStateIndicator<br>&nbsp;&nbsp;&nbsp;&nbsp;void SetState(TAknEditingState aState);<br>&nbsp;&nbsp;&nbsp;&nbsp;CAknIndicatorContainer* IndicatorContainer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ...<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki>;<br>// FepControl.cpp:<br>void CExampleFepControl::ConstructL()<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;CreateWindowL();<br>&nbsp;&nbsp;&nbsp;&nbsp;SetNonFocusing();<br>&nbsp;&nbsp;&nbsp;&nbsp;RWindow& window = Window();<br>&nbsp;&nbsp;&nbsp;&nbsp;window.SetOrdinalPosition(0, ECoeWinPriorityFep);<br>&nbsp;&nbsp;&nbsp;&nbsp;TPoint fepControlPos(0, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;SetExtent(fepControlPos, TSize(0,0));<br>&nbsp;&nbsp;&nbsp;&nbsp;window.SetExtent(fepControlPos, TSize(0,0));<br>&nbsp;&nbsp;&nbsp;&nbsp;window.SetNonFading(ETrue);<br>&nbsp;&nbsp;&nbsp;&nbsp;// Create multi-tap input engine<br>&nbsp;&nbsp;&nbsp;&nbsp;iMultiTapEngine = CExampleFepMultiTapEngine::NewL(*this);<br>&nbsp;&nbsp;&nbsp;&nbsp;// Create status pane indicator<br>&nbsp;&nbsp;&nbsp;&nbsp;iIndicator = CFepIndicator::NewL();<br>&nbsp;&nbsp;&nbsp;&nbsp;CAknEnv::Static()-<nowiki>></nowiki>SwapEditingStateIndicator(iIndicator);<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki><br>&nbsp;// FepIndicator.cpp:<br>void CFepIndicator::SetState(TAknEditingState */aState*/)<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;CAknIndicatorContainer* CFepIndicator::IndicatorContainer()<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;return NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;//------------------------------------------------------------------------------  
 
The dummy indicator implementation would be something like this:<br>//------------------------------------------------------------------------------<br>// FepIndicator.h:<br><nowiki>#</nowiki>include <nowiki><</nowiki>akneditstateindicator.h<nowiki>></nowiki> &nbsp;// for MAknEditingStateIndicator<br>class CFepIndicator : public CBase, public MAknEditingStateIndicator<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enum TIndicatorState<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EStateNone = 1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EStateNumeric,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EStateAlphabat<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki>;<br>public:<br>&nbsp;&nbsp;&nbsp;&nbsp;static CFepIndicator* NewL();<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>~</nowiki>CFepIndicator();<br>&nbsp;&nbsp;&nbsp;&nbsp;virtual void SetState(TIndicatorState aState);<br>&nbsp;&nbsp;&nbsp;&nbsp;// From MAknEditingStateIndicator<br>&nbsp;&nbsp;&nbsp;&nbsp;void SetState(TAknEditingState aState);<br>&nbsp;&nbsp;&nbsp;&nbsp;CAknIndicatorContainer* IndicatorContainer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ...<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki>;<br>// FepControl.cpp:<br>void CExampleFepControl::ConstructL()<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;CreateWindowL();<br>&nbsp;&nbsp;&nbsp;&nbsp;SetNonFocusing();<br>&nbsp;&nbsp;&nbsp;&nbsp;RWindow& window = Window();<br>&nbsp;&nbsp;&nbsp;&nbsp;window.SetOrdinalPosition(0, ECoeWinPriorityFep);<br>&nbsp;&nbsp;&nbsp;&nbsp;TPoint fepControlPos(0, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;SetExtent(fepControlPos, TSize(0,0));<br>&nbsp;&nbsp;&nbsp;&nbsp;window.SetExtent(fepControlPos, TSize(0,0));<br>&nbsp;&nbsp;&nbsp;&nbsp;window.SetNonFading(ETrue);<br>&nbsp;&nbsp;&nbsp;&nbsp;// Create multi-tap input engine<br>&nbsp;&nbsp;&nbsp;&nbsp;iMultiTapEngine = CExampleFepMultiTapEngine::NewL(*this);<br>&nbsp;&nbsp;&nbsp;&nbsp;// Create status pane indicator<br>&nbsp;&nbsp;&nbsp;&nbsp;iIndicator = CFepIndicator::NewL();<br>&nbsp;&nbsp;&nbsp;&nbsp;CAknEnv::Static()-<nowiki>></nowiki>SwapEditingStateIndicator(iIndicator);<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki><br>&nbsp;// FepIndicator.cpp:<br>void CFepIndicator::SetState(TAknEditingState */aState*/)<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;CAknIndicatorContainer* CFepIndicator::IndicatorContainer()<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>{</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;return NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;<nowiki>}</nowiki><br>&nbsp;&nbsp;&nbsp;&nbsp;//------------------------------------------------------------------------------  
  
[[Category:Known Issue]][[Category:Symbian C++]][[Category:S60 2nd Edition]][[Category:S60 3rd Edition]]
+
[[Category:Known Issue]][[Category:Symbian C++]][[Category:S60 2nd Edition (initial release)]][[Category:S60 3rd Edition (initial release)]]

Revision as of 09:22, 19 March 2012

Article Metadata
CompatibilityArticle
Created: User:Technical writer 1 (21 Sep 2006)
Last edited: hamishwillee (19 Mar 2012)

Overview

There is a bug in S60 browser code that can cause a crash with 3rd-party FEPs.  After installing a 3rd-party FEP, the browser crashes on launch, causing a KERN-EXEC 3 panic.

Description

This bug can be worked around by implementing your own MAknEditingStateIndicator that has empty methods. This  will avert the browser from crashing but may have unexpected behavior with some other components, so extended testing with other editors is advised.
To implement this indicator interface you will need a header file which is not part of the SDK until S60 3rd Edition, Feature Pack 1. The header (akneditstateindicator.h), included in the S60 3rd Edition, FP1 SDK, can be used also with previous S60 platform versions that are affected by this issue.

Solution

The dummy indicator implementation would be something like this:
//------------------------------------------------------------------------------
// FepIndicator.h:
#include <akneditstateindicator.h>  // for MAknEditingStateIndicator
class CFepIndicator : public CBase, public MAknEditingStateIndicator
    {
public:
        enum TIndicatorState
            {
            EStateNone = 1,
            EStateNumeric,
            EStateAlphabat
            };
public:
    static CFepIndicator* NewL();
    ~CFepIndicator();
    virtual void SetState(TIndicatorState aState);
    // From MAknEditingStateIndicator
    void SetState(TAknEditingState aState);
    CAknIndicatorContainer* IndicatorContainer();
       // ...
    };
// FepControl.cpp:
void CExampleFepControl::ConstructL()
    {
    CreateWindowL();
    SetNonFocusing();
    RWindow& window = Window();
    window.SetOrdinalPosition(0, ECoeWinPriorityFep);
    TPoint fepControlPos(0, 0);
    SetExtent(fepControlPos, TSize(0,0));
    window.SetExtent(fepControlPos, TSize(0,0));
    window.SetNonFading(ETrue);
    // Create multi-tap input engine
    iMultiTapEngine = CExampleFepMultiTapEngine::NewL(*this);
    // Create status pane indicator
    iIndicator = CFepIndicator::NewL();
    CAknEnv::Static()->SwapEditingStateIndicator(iIndicator);
    }
 // FepIndicator.cpp:
void CFepIndicator::SetState(TAknEditingState */aState*/)
    {
    }
    CAknIndicatorContainer* CFepIndicator::IndicatorContainer()
    {
    return NULL;
    }
    //------------------------------------------------------------------------------

79 page views in the last 30 days.